Просмотр исходного кода

First pass at the mutable API. Quite a bit more to do - in particular, it's pretty slow right now.

Jon Skeet 10 лет назад
Родитель
Сommit
e38294a62d
100 измененных файлов с 8683 добавлено и 85702 удалено
  1. 9 77
      csharp/protos/extest/unittest_issues.proto
  2. 0 548
      csharp/src/ProtocolBuffers.Test/AbstractMessageTest.cs
  3. 1 1
      csharp/src/ProtocolBuffers.Test/ByteStringTest.cs
  4. 29 35
      csharp/src/ProtocolBuffers.Test/CodedInputStreamTest.cs
  5. 14 9
      csharp/src/ProtocolBuffers.Test/CodedOutputStreamTest.cs
  6. 0 125
      csharp/src/ProtocolBuffers.Test/Collections/PopsicleListTest.cs
  7. 0 18
      csharp/src/ProtocolBuffers.Test/Compatibility/BinaryCompatibilityTests.cs
  8. 0 227
      csharp/src/ProtocolBuffers.Test/Compatibility/CompatibilityTests.cs
  9. 0 35
      csharp/src/ProtocolBuffers.Test/Compatibility/DictionaryCompatibilityTests.cs
  10. 0 43
      csharp/src/ProtocolBuffers.Test/Compatibility/JsonCompatibilityTests.cs
  11. 0 38
      csharp/src/ProtocolBuffers.Test/Compatibility/TestResources.cs
  12. 0 35
      csharp/src/ProtocolBuffers.Test/Compatibility/TextCompatibilityTests.cs
  13. 0 45
      csharp/src/ProtocolBuffers.Test/Compatibility/XmlCompatibilityTests.cs
  14. BIN
      csharp/src/ProtocolBuffers.Test/Compatibility/google_message1.dat
  15. BIN
      csharp/src/ProtocolBuffers.Test/Compatibility/google_message2.dat
  16. 3 79
      csharp/src/ProtocolBuffers.Test/DeprecatedMemberTest.cs
  17. 38 114
      csharp/src/ProtocolBuffers.Test/DescriptorsTest.cs
  18. 0 276
      csharp/src/ProtocolBuffers.Test/DynamicMessageTest.cs
  19. 0 200
      csharp/src/ProtocolBuffers.Test/ExtendableMessageTest.cs
  20. 0 198
      csharp/src/ProtocolBuffers.Test/FieldPresenceTest.cs
  21. 0 102
      csharp/src/ProtocolBuffers.Test/GeneratedBuilderTest.cs
  22. 144 767
      csharp/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
  23. 5 5
      csharp/src/ProtocolBuffers.Test/IssuesTest.cs
  24. 0 90
      csharp/src/ProtocolBuffers.Test/MessageStreamIteratorTest.cs
  25. 0 78
      csharp/src/ProtocolBuffers.Test/MessageStreamWriterTest.cs
  26. 0 344
      csharp/src/ProtocolBuffers.Test/MessageTest.cs
  27. 0 82
      csharp/src/ProtocolBuffers.Test/MessageUtilTest.cs
  28. 0 81
      csharp/src/ProtocolBuffers.Test/NameHelpersTest.cs
  29. 10 52
      csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj
  30. 0 1033
      csharp/src/ProtocolBuffers.Test/ReflectionTester.cs
  31. 50 0
      csharp/src/ProtocolBuffers.Test/RepeatedFieldTest.cs
  32. 0 166
      csharp/src/ProtocolBuffers.Test/ReusableBuilderTest.cs
  33. 9 13
      csharp/src/ProtocolBuffers.Test/TestCornerCases.cs
  34. 0 277
      csharp/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs
  35. 0 4547
      csharp/src/ProtocolBuffers.Test/TestProtos/GoogleSize.cs
  36. 0 6612
      csharp/src/ProtocolBuffers.Test/TestProtos/GoogleSpeed.cs
  37. 0 33878
      csharp/src/ProtocolBuffers.Test/TestProtos/Unittest.cs
  38. 0 7543
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestCustomOptions.cs
  39. 0 732
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestDropUnknownFields.cs
  40. 0 5035
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestEnormousDescriptor.cs
  41. 0 2277
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestExtrasXmltest.cs
  42. 0 347
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImport.cs
  43. 165 0
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportProto3.cs
  44. 0 333
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportPublic.cs
  45. 150 0
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportPublicProto3.cs
  46. 452 2119
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestIssues.cs
  47. 0 1824
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestMset.cs
  48. 0 3876
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestNoFieldPresence.cs
  49. 0 738
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestOptimizeFor.cs
  50. 6060 0
      csharp/src/ProtocolBuffers.Test/TestProtos/UnittestProto3.cs
  51. 0 809
      csharp/src/ProtocolBuffers.Test/TestProtos/UnknownEnumTest.cs
  52. 0 83
      csharp/src/ProtocolBuffers.Test/TestReaderForUrlEncoded.cs
  53. 0 301
      csharp/src/ProtocolBuffers.Test/TestResources.cs
  54. 0 1862
      csharp/src/ProtocolBuffers.Test/TestUtil.cs
  55. 0 498
      csharp/src/ProtocolBuffers.Test/TestWriterFormatJson.cs
  56. 0 468
      csharp/src/ProtocolBuffers.Test/TestWriterFormatXml.cs
  57. 0 560
      csharp/src/ProtocolBuffers.Test/TextFormatTest.cs
  58. 0 431
      csharp/src/ProtocolBuffers.Test/UnknownFieldSetTest.cs
  59. 2 253
      csharp/src/ProtocolBuffers.Test/WireFormatTest.cs
  60. 0 274
      csharp/src/ProtocolBuffers/AbstractBuilder.cs
  61. 0 264
      csharp/src/ProtocolBuffers/AbstractBuilderLite.cs
  62. 0 293
      csharp/src/ProtocolBuffers/AbstractMessage.cs
  63. 0 140
      csharp/src/ProtocolBuffers/AbstractMessageLite.cs
  64. 1 1
      csharp/src/ProtocolBuffers/ByteArray.cs
  65. 19 1
      csharp/src/ProtocolBuffers/ByteString.cs
  66. 25 138
      csharp/src/ProtocolBuffers/CodedInputStream.cs
  67. 25 46
      csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs
  68. 144 194
      csharp/src/ProtocolBuffers/CodedOutputStream.cs
  69. 1 1
      csharp/src/ProtocolBuffers/Collections/Dictionaries.cs
  70. 1 1
      csharp/src/ProtocolBuffers/Collections/Enumerables.cs
  71. 0 58
      csharp/src/ProtocolBuffers/Collections/IPopsicleList.cs
  72. 1 1
      csharp/src/ProtocolBuffers/Collections/Lists.cs
  73. 0 208
      csharp/src/ProtocolBuffers/Collections/PopsicleList.cs
  74. 1 1
      csharp/src/ProtocolBuffers/Collections/ReadOnlyDictionary.cs
  75. 168 0
      csharp/src/ProtocolBuffers/Collections/RepeatedField.cs
  76. 47 0
      csharp/src/ProtocolBuffers/Collections/RepeatedFieldExtensions.cs
  77. 937 2581
      csharp/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
  78. 1 1
      csharp/src/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs
  79. 1 1
      csharp/src/ProtocolBuffers/DescriptorProtos/PartialClasses.cs
  80. 3 2
      csharp/src/ProtocolBuffers/Descriptors/DescriptorBase.cs
  81. 2 2
      csharp/src/ProtocolBuffers/Descriptors/DescriptorPool.cs
  82. 2 2
      csharp/src/ProtocolBuffers/Descriptors/DescriptorUtil.cs
  83. 1 12
      csharp/src/ProtocolBuffers/Descriptors/DescriptorValidationException.cs
  84. 6 25
      csharp/src/ProtocolBuffers/Descriptors/EnumDescriptor.cs
  85. 3 4
      csharp/src/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs
  86. 17 206
      csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
  87. 2 2
      csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs
  88. 1 1
      csharp/src/ProtocolBuffers/Descriptors/FieldType.cs
  89. 19 36
      csharp/src/ProtocolBuffers/Descriptors/FileDescriptor.cs
  90. 2 2
      csharp/src/ProtocolBuffers/Descriptors/IDescriptor.cs
  91. 2 2
      csharp/src/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs
  92. 1 1
      csharp/src/ProtocolBuffers/Descriptors/MappedType.cs
  93. 15 15
      csharp/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs
  94. 2 2
      csharp/src/ProtocolBuffers/Descriptors/MethodDescriptor.cs
  95. 2 2
      csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs
  96. 1 1
      csharp/src/ProtocolBuffers/Descriptors/PackageDescriptor.cs
  97. 4 4
      csharp/src/ProtocolBuffers/Descriptors/ServiceDescriptor.cs
  98. 0 624
      csharp/src/ProtocolBuffers/DynamicMessage.cs
  99. 85 0
      csharp/src/ProtocolBuffers/EnumHelper.cs
  100. 0 234
      csharp/src/ProtocolBuffers/EnumLite.cs

+ 9 - 77
csharp/protos/extest/unittest_issues.proto

@@ -1,4 +1,4 @@
-syntax = "proto2";
+syntax = "proto3";
 
 // These proto descriptors have at one time been reported as an issue or defect.
 // They are kept here to replicate the issue, and continue to verify the fix.
@@ -9,65 +9,6 @@ option csharp_namespace = "UnitTest.Issues.TestProtos";
 package unittest_issues;
 option optimize_for = SPEED;
 
-// The following is a representative set of features
-/*
-enum EnumOptions {
-    ONE = 0;
-    TWO = 1;
-    THREE = 2;
-}
-
-message TestBasicChild
-{
-    repeated EnumOptions options = 3;
-    optional bytes binary = 4;
-}
-
-message TestBasicNoFields {
-}
-
-message TestBasicRescursive {
-    optional TestBasicRescursive child = 1;
-}
-
-message TestBasicMessage {
-
-    optional int64 number = 6;
-    repeated int32 numbers = 2;
-    optional string text = 3;
-    repeated string textlines = 700;
-    optional bool valid = 5;
-    
-    optional TestBasicChild child = 1;
-    repeated group Children = 401 
-    {
-        repeated EnumOptions options = 3;
-        optional bytes binary = 4;
-    }
-
-    extensions 100 to 199;
-}
-
-message  TestBasicExtension {
-  required int32 number = 1;
-}
-  
-extend TestBasicMessage {
-  optional EnumOptions extension_enum = 101;
-  optional string extension_text = 102;
-  repeated int32 extension_number = 103 [packed = true];
-  optional TestBasicExtension extension_message = 199;
-}
-
-// Issue for non-qualified type reference in new services generation
-option (google.protobuf.csharp_file_options).service_generator_type = IRPCDISPATCH;
-
-service TestGenericService {
-  rpc Foo(TestBasicNoFields) returns (TestBasicMessage);
-  rpc Bar(TestBasicNoFields) returns (TestBasicMessage);
-}
-*/
-
 // Old issue 13: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=13
 // New issue 309: https://github.com/google/protobuf/issues/309
  
@@ -90,27 +31,17 @@ service TestGenericService {
 //    optional int32 _01 = 1;
 // }
 
-// Issue 28: Circular message dependencies result in null defaults for DefaultInstance
-
-message MyMessageAReferenceB {
-    required MyMessageBReferenceA value = 1;
-}
-
-message MyMessageBReferenceA {
-    required MyMessageAReferenceB value = 1;
-}
-
 // issue 19 - negative enum values
 
 enum NegativeEnum {
+    NEGATIVE_ENUM_ZERO = 0;
     FiveBelow = -5;
     MinusOne = -1;
-    Zero = 0;
 }
 
 message NegativeEnumMessage { 
-    optional NegativeEnum value = 1;
-    repeated NegativeEnum values = 2;
+    NegativeEnum value = 1;
+    repeated NegativeEnum values = 2 [packed = false];
     repeated NegativeEnum packed_values = 3 [packed=true];
 }
 
@@ -121,21 +52,22 @@ message DeprecatedChild {
 }
 
 enum DeprecatedEnum {
+    DEPRECATED_ZERO = 0;
     one = 1;
 }
 
 message DeprecatedFieldsMessage {
-    optional int32 PrimitiveValue = 1 [deprecated = true];
+    int32 PrimitiveValue = 1 [deprecated = true];
     repeated int32 PrimitiveArray = 2 [deprecated = true];
 
-    optional DeprecatedChild MessageValue = 3 [deprecated = true];
+    DeprecatedChild MessageValue = 3 [deprecated = true];
     repeated DeprecatedChild MessageArray = 4 [deprecated = true];
 
-    optional DeprecatedEnum EnumValue = 5 [deprecated = true];
+    DeprecatedEnum EnumValue = 5 [deprecated = true];
     repeated DeprecatedEnum EnumArray = 6 [deprecated = true];
 }
 
 // Issue 45: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=45
 message ItemField {
-  optional int32 item = 1;
+  int32 item = 1;
 }

+ 0 - 548
csharp/src/ProtocolBuffers.Test/AbstractMessageTest.cs

@@ -1,548 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class AbstractMessageTest
-    {
-        [Test]
-        public void Clear()
-        {
-            AbstractMessageWrapper message =
-                new AbstractMessageWrapper.Builder(TestAllTypes.CreateBuilder(TestUtil.GetAllSet())).Clear().Build();
-            TestUtil.AssertClear((TestAllTypes) message.WrappedMessage);
-        }
-
-        [Test]
-        public void Copy()
-        {
-            AbstractMessageWrapper message =
-                new AbstractMessageWrapper.Builder(TestAllTypes.CreateBuilder()).MergeFrom(TestUtil.GetAllSet()).Build();
-            TestUtil.AssertAllFieldsSet((TestAllTypes) message.WrappedMessage);
-        }
-
-        [Test]
-        public void CreateAndBuild()
-        {
-            TestAllTypes.CreateBuilder()
-                .Build();
-        }
-
-        [Test]
-        public void SerializedSize()
-        {
-            TestAllTypes message = TestUtil.GetAllSet();
-            IMessage abstractMessage = new AbstractMessageWrapper(TestUtil.GetAllSet());
-
-            Assert.AreEqual(message.SerializedSize, abstractMessage.SerializedSize);
-        }
-
-        [Test]
-        public void Serialization()
-        {
-            IMessage abstractMessage = new AbstractMessageWrapper(TestUtil.GetAllSet());
-            TestUtil.AssertAllFieldsSet(TestAllTypes.ParseFrom(abstractMessage.ToByteString()));
-            Assert.AreEqual(TestUtil.GetAllSet().ToByteString(), abstractMessage.ToByteString());
-        }
-
-        [Test]
-        public void Parsing()
-        {
-            IBuilder builder = new AbstractMessageWrapper.Builder(TestAllTypes.CreateBuilder());
-            AbstractMessageWrapper message =
-                (AbstractMessageWrapper) builder.WeakMergeFrom(TestUtil.GetAllSet().ToByteString()).WeakBuild();
-            TestUtil.AssertAllFieldsSet((TestAllTypes) message.WrappedMessage);
-        }
-
-        [Test]
-        public void PackedSerialization()
-        {
-            IMessage abstractMessage = new AbstractMessageWrapper(TestUtil.GetPackedSet());
-            TestUtil.AssertPackedFieldsSet(TestPackedTypes.ParseFrom(abstractMessage.ToByteString()));
-            Assert.AreEqual(TestUtil.GetPackedSet().ToByteString(), abstractMessage.ToByteString());
-        }
-
-        [Test]
-        public void PackedParsing()
-        {
-            AbstractMessageWrapper.Builder builder = new AbstractMessageWrapper.Builder(TestPackedTypes.CreateBuilder());
-            AbstractMessageWrapper message = builder.MergeFrom(TestUtil.GetPackedSet().ToByteString()).Build();
-            TestUtil.AssertPackedFieldsSet((TestPackedTypes)message.WrappedMessage);
-        }
-
-        [Test]
-        public void UnpackedParsingOfPackedInput()
-        {
-            byte[] bytes = TestUtil.GetPackedSet().ToByteArray();
-            TestUnpackedTypes message = TestUnpackedTypes.ParseFrom(bytes);
-            TestUtil.AssertUnpackedFieldsSet(message);
-        }
-
-        [Test]
-        public void PackedParsingOfUnpackedInput()
-        {
-            byte[] bytes = TestUnpackedTypes.ParseFrom(TestUtil.GetPackedSet().ToByteArray()).ToByteArray();
-            TestPackedTypes message = TestPackedTypes.ParseFrom(bytes);
-            TestUtil.AssertPackedFieldsSet(message);
-        }
-
-        [Test]
-        public void UnpackedParsingOfPackedInputExtensions()
-        {
-            byte[] bytes = TestUtil.GetPackedSet().ToByteArray();
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            Unittest.RegisterAllExtensions(registry);
-            UnittestImport.RegisterAllExtensions(registry);
-            TestUnpackedExtensions message = TestUnpackedExtensions.ParseFrom(bytes, registry);
-            TestUtil.AssertUnpackedExtensionsSet(message);
-        }
-
-        [Test]
-        public void PackedParsingOfUnpackedInputExtensions()
-        {
-            byte[] bytes = TestUnpackedTypes.ParseFrom(TestUtil.GetPackedSet().ToByteArray()).ToByteArray();
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            Unittest.RegisterAllExtensions(registry);
-            TestPackedExtensions message = TestPackedExtensions.ParseFrom(bytes, registry);
-            TestUtil.AssertPackedExtensionsSet(message);
-        }
-
-        [Test]
-        public void OptimizedForSize()
-        {
-            // We're mostly only Checking that this class was compiled successfully.
-            TestOptimizedForSize message = TestOptimizedForSize.CreateBuilder().SetI(1).Build();
-            message = TestOptimizedForSize.ParseFrom(message.ToByteString());
-            Assert.AreEqual(2, message.SerializedSize);
-        }
-
-        // -----------------------------------------------------------------
-        // Tests for isInitialized().
-
-        private static readonly TestRequired TestRequiredUninitialized = TestRequired.DefaultInstance;
-
-        private static readonly TestRequired TestRequiredInitialized =
-            TestRequired.CreateBuilder().SetA(1).SetB(2).SetC(3).Build();
-
-        [Test]
-        public void IsInitialized()
-        {
-            TestRequired.Builder builder = TestRequired.CreateBuilder();
-            AbstractMessageWrapper.Builder abstractBuilder = new AbstractMessageWrapper.Builder(builder);
-
-            Assert.IsFalse(abstractBuilder.IsInitialized);
-            builder.A = 1;
-            Assert.IsFalse(abstractBuilder.IsInitialized);
-            builder.B = 1;
-            Assert.IsFalse(abstractBuilder.IsInitialized);
-            builder.C = 1;
-            Assert.IsTrue(abstractBuilder.IsInitialized);
-        }
-
-        [Test]
-        public void ForeignIsInitialized()
-        {
-            TestRequiredForeign.Builder builder = TestRequiredForeign.CreateBuilder();
-            AbstractMessageWrapper.Builder abstractBuilder = new AbstractMessageWrapper.Builder(builder);
-
-            Assert.IsTrue(abstractBuilder.IsInitialized);
-
-            builder.SetOptionalMessage(TestRequiredUninitialized);
-            Assert.IsFalse(abstractBuilder.IsInitialized);
-
-            builder.SetOptionalMessage(TestRequiredInitialized);
-            Assert.IsTrue(abstractBuilder.IsInitialized);
-
-            builder.AddRepeatedMessage(TestRequiredUninitialized);
-            Assert.IsFalse(abstractBuilder.IsInitialized);
-
-            builder.SetRepeatedMessage(0, TestRequiredInitialized);
-            Assert.IsTrue(abstractBuilder.IsInitialized);
-        }
-
-        // -----------------------------------------------------------------
-        // Tests for mergeFrom
-
-        private static readonly TestAllTypes MergeSource = TestAllTypes.CreateBuilder()
-            .SetOptionalInt32(1)
-            .SetOptionalString("foo")
-            .SetOptionalForeignMessage(ForeignMessage.DefaultInstance)
-            .AddRepeatedString("bar")
-            .Build();
-
-        private static readonly TestAllTypes MergeDest = TestAllTypes.CreateBuilder()
-            .SetOptionalInt64(2)
-            .SetOptionalString("baz")
-            .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(3).Build())
-            .AddRepeatedString("qux")
-            .Build();
-
-        private const string MergeResultText = "optional_int32: 1\n" +
-                                               "optional_int64: 2\n" +
-                                               "optional_string: \"foo\"\n" +
-                                               "optional_foreign_message {\n" +
-                                               "  c: 3\n" +
-                                               "}\n" +
-                                               "repeated_string: \"qux\"\n" +
-                                               "repeated_string: \"bar\"\n";
-
-        [Test]
-        public void MergeFrom()
-        {
-            AbstractMessageWrapper result = (AbstractMessageWrapper)
-                                            new AbstractMessageWrapper.Builder(TestAllTypes.CreateBuilder(MergeDest))
-                                                .MergeFrom(MergeSource)
-                                                .Build();
-
-            Assert.AreEqual(MergeResultText, result.ToString());
-        }
-
-        // -----------------------------------------------------------------
-        // Tests for equals and hashCode
-
-        [Test]
-        public void EqualsAndHashCode()
-        {
-            TestAllTypes a = TestUtil.GetAllSet();
-            TestAllTypes b = TestAllTypes.CreateBuilder().Build();
-            TestAllTypes c = TestAllTypes.CreateBuilder(b).AddRepeatedString("x").Build();
-            TestAllTypes d = TestAllTypes.CreateBuilder(c).AddRepeatedString("y").Build();
-            TestAllExtensions e = TestUtil.GetAllExtensionsSet();
-            TestAllExtensions f = TestAllExtensions.CreateBuilder(e)
-                .AddExtension(Unittest.RepeatedInt32Extension, 999).Build();
-
-            CheckEqualsIsConsistent(a);
-            CheckEqualsIsConsistent(b);
-            CheckEqualsIsConsistent(c);
-            CheckEqualsIsConsistent(d);
-            CheckEqualsIsConsistent(e);
-            CheckEqualsIsConsistent(f);
-
-            CheckNotEqual(a, b);
-            CheckNotEqual(a, c);
-            CheckNotEqual(a, d);
-            CheckNotEqual(a, e);
-            CheckNotEqual(a, f);
-
-            CheckNotEqual(b, c);
-            CheckNotEqual(b, d);
-            CheckNotEqual(b, e);
-            CheckNotEqual(b, f);
-
-            CheckNotEqual(c, d);
-            CheckNotEqual(c, e);
-            CheckNotEqual(c, f);
-
-            CheckNotEqual(d, e);
-            CheckNotEqual(d, f);
-
-            CheckNotEqual(e, f);
-
-            // Deserializing into the TestEmptyMessage such that every field is an UnknownFieldSet.Field
-            TestEmptyMessage eUnknownFields = TestEmptyMessage.ParseFrom(e.ToByteArray());
-            TestEmptyMessage fUnknownFields = TestEmptyMessage.ParseFrom(f.ToByteArray());
-            CheckNotEqual(eUnknownFields, fUnknownFields);
-            CheckEqualsIsConsistent(eUnknownFields);
-            CheckEqualsIsConsistent(fUnknownFields);
-
-            // Subseqent reconstitutions should be identical
-            TestEmptyMessage eUnknownFields2 = TestEmptyMessage.ParseFrom(e.ToByteArray());
-            CheckEqualsIsConsistent(eUnknownFields, eUnknownFields2);
-        }
-
-        /// <summary>
-        /// Asserts that the given protos are equal and have the same hash code.
-        /// </summary>
-        private static void CheckEqualsIsConsistent(IMessage message)
-        {
-            // Object should be equal to itself.
-            Assert.AreEqual(message, message);
-
-            // Object should be equal to a dynamic copy of itself.
-            DynamicMessage dynamic = DynamicMessage.CreateBuilder(message).Build();
-            CheckEqualsIsConsistent(message, dynamic);
-        }
-
-        /// <summary>
-        /// Asserts that the given protos are equal and have the same hash code.
-        /// </summary>
-        private static void CheckEqualsIsConsistent(IMessage message1, IMessage message2)
-        {
-            // Not using Assert.AreEqual as that checks for type equality, which isn't
-            // what we want bearing in mind the dynamic message checks.
-            Assert.IsTrue(message1.Equals(message2));
-            Assert.IsTrue(message2.Equals(message1));
-            Assert.AreEqual(message2.GetHashCode(), message1.GetHashCode());
-        }
-
-        /// <summary>
-        /// Asserts that the given protos are not equal and have different hash codes.
-        /// </summary>
-        /// <remarks>
-        /// It's valid for non-equal objects to have the same hash code, so
-        /// this test is stricter than it needs to be. However, this should happen
-        /// relatively rarely. (If this test fails, it's probably still due to a bug.)
-        /// </remarks>
-        private static void CheckNotEqual(IMessage m1, IMessage m2)
-        {
-            String equalsError = string.Format("{0} should not be equal to {1}", m1, m2);
-            Assert.IsFalse(m1.Equals(m2), equalsError);
-            Assert.IsFalse(m2.Equals(m1), equalsError);
-
-            Assert.IsFalse(m1.GetHashCode() == m2.GetHashCode(),
-                           string.Format("{0} should have a different hash code from {1}", m1, m2));
-        }
-
-        /// <summary>
-        /// Extends AbstractMessage and wraps some other message object.  The methods
-        /// of the Message interface which aren't explicitly implemented by
-        /// AbstractMessage are forwarded to the wrapped object.  This allows us to
-        /// test that AbstractMessage's implementations work even if the wrapped
-        /// object does not use them.
-        /// </summary>
-        private class AbstractMessageWrapper : AbstractMessage<AbstractMessageWrapper, AbstractMessageWrapper.Builder>
-        {
-            private readonly IMessage wrappedMessage;
-
-            public IMessage WrappedMessage
-            {
-                get { return wrappedMessage; }
-            }
-
-            public AbstractMessageWrapper(IMessage wrappedMessage)
-            {
-                this.wrappedMessage = wrappedMessage;
-            }
-
-            public override MessageDescriptor DescriptorForType
-            {
-                get { return wrappedMessage.DescriptorForType; }
-            }
-
-            public override AbstractMessageWrapper DefaultInstanceForType
-            {
-                get { return new AbstractMessageWrapper(wrappedMessage.WeakDefaultInstanceForType); }
-            }
-
-            public override IDictionary<FieldDescriptor, object> AllFields
-            {
-                get { return wrappedMessage.AllFields; }
-            }
-
-            public override bool HasField(FieldDescriptor field)
-            {
-                return wrappedMessage.HasField(field);
-            }
-
-            public override bool HasOneof(OneofDescriptor oneof)
-            {
-                return wrappedMessage.HasOneof(oneof);
-            }
-
-            public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
-            {
-                return wrappedMessage.OneofFieldDescriptor(oneof);
-            }
-
-            public override object this[FieldDescriptor field]
-            {
-                get { return wrappedMessage[field]; }
-            }
-
-            public override object this[FieldDescriptor field, int index]
-            {
-                get { return wrappedMessage[field, index]; }
-            }
-
-            public override int GetRepeatedFieldCount(FieldDescriptor field)
-            {
-                return wrappedMessage.GetRepeatedFieldCount(field);
-            }
-
-            public override UnknownFieldSet UnknownFields
-            {
-                get { return wrappedMessage.UnknownFields; }
-            }
-
-            public override Builder CreateBuilderForType()
-            {
-                return new Builder(wrappedMessage.WeakCreateBuilderForType());
-            }
-
-            public override Builder ToBuilder()
-            {
-                return new Builder(wrappedMessage.WeakToBuilder());
-            }
-
-            internal class Builder : AbstractBuilder<AbstractMessageWrapper, Builder>
-            {
-                private readonly IBuilder wrappedBuilder;
-
-                protected override Builder ThisBuilder
-                {
-                    get { return this; }
-                }
-
-                internal Builder(IBuilder wrappedBuilder)
-                {
-                    this.wrappedBuilder = wrappedBuilder;
-                }
-
-                public override Builder MergeFrom(AbstractMessageWrapper other)
-                {
-                    wrappedBuilder.WeakMergeFrom(other.wrappedMessage);
-                    return this;
-                }
-
-                public override bool IsInitialized
-                {
-                    get { return wrappedBuilder.IsInitialized; }
-                }
-
-                public override IDictionary<FieldDescriptor, object> AllFields
-                {
-                    get { return wrappedBuilder.AllFields; }
-                }
-
-                public override object this[FieldDescriptor field]
-                {
-                    get { return wrappedBuilder[field]; }
-                    set { wrappedBuilder[field] = value; }
-                }
-
-                public override MessageDescriptor DescriptorForType
-                {
-                    get { return wrappedBuilder.DescriptorForType; }
-                }
-
-                public override int GetRepeatedFieldCount(FieldDescriptor field)
-                {
-                    return wrappedBuilder.GetRepeatedFieldCount(field);
-                }
-
-                public override object this[FieldDescriptor field, int index]
-                {
-                    get { return wrappedBuilder[field, index]; }
-                    set { wrappedBuilder[field, index] = value; }
-                }
-
-                public override bool HasField(FieldDescriptor field)
-                {
-                    return wrappedBuilder.HasField(field);
-                }
-
-                public override bool HasOneof(OneofDescriptor oneof)
-                {
-                    return wrappedBuilder.HasOneof(oneof);
-                }
-
-                public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
-                {
-                    return wrappedBuilder.OneofFieldDescriptor(oneof);
-                }
-
-                public override UnknownFieldSet UnknownFields
-                {
-                    get { return wrappedBuilder.UnknownFields; }
-                    set { wrappedBuilder.UnknownFields = value; }
-                }
-
-                public override AbstractMessageWrapper Build()
-                {
-                    return new AbstractMessageWrapper(wrappedBuilder.WeakBuild());
-                }
-
-                public override AbstractMessageWrapper BuildPartial()
-                {
-                    return new AbstractMessageWrapper(wrappedBuilder.WeakBuildPartial());
-                }
-
-                public override Builder Clone()
-                {
-                    return new Builder(wrappedBuilder.WeakClone());
-                }
-
-                public override AbstractMessageWrapper DefaultInstanceForType
-                {
-                    get { return new AbstractMessageWrapper(wrappedBuilder.WeakDefaultInstanceForType); }
-                }
-
-                public override Builder ClearField(FieldDescriptor field)
-                {
-                    wrappedBuilder.WeakClearField(field);
-                    return this;
-                }
-
-                public override Builder ClearOneof(OneofDescriptor oneof)
-                {
-                    wrappedBuilder.WeakClearOneof(oneof);
-                    return this;
-                }
-
-                public override Builder AddRepeatedField(FieldDescriptor field, object value)
-                {
-                    wrappedBuilder.WeakAddRepeatedField(field, value);
-                    return this;
-                }
-
-                public override IBuilder CreateBuilderForField(FieldDescriptor field)
-                {
-                    wrappedBuilder.CreateBuilderForField(field);
-                    return this;
-                }
-
-                public override Builder MergeFrom(IMessage other)
-                {
-                    wrappedBuilder.WeakMergeFrom(other);
-                    return this;
-                }
-
-                public override Builder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry)
-                {
-                    wrappedBuilder.WeakMergeFrom(input, extensionRegistry);
-                    return this;
-                }
-            }
-        }
-    }
-}

+ 1 - 1
csharp/src/ProtocolBuffers.Test/ByteStringTest.cs

@@ -38,7 +38,7 @@ using System;
 using System.Text;
 using NUnit.Framework;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     public class ByteStringTest
     {

+ 29 - 35
csharp/src/ProtocolBuffers.Test/CodedInputStreamTest.cs

@@ -37,11 +37,12 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos;
+using Google.Protobuf.Collections;
+using Google.Protobuf.Descriptors;
+using Google.Protobuf.TestProtos;
 using NUnit.Framework;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     public class CodedInputStreamTest
     {
@@ -231,7 +232,7 @@ namespace Google.ProtocolBuffers
             Assert.AreEqual(0x7FFFFFFFFFFFFFFFL, CodedInputStream.DecodeZigZag64(0xFFFFFFFFFFFFFFFEL));
             Assert.AreEqual(unchecked((long) 0x8000000000000000L), CodedInputStream.DecodeZigZag64(0xFFFFFFFFFFFFFFFFL));
         }
-
+        /*
         [Test]
         public void ReadWholeMessage()
         {
@@ -273,7 +274,7 @@ namespace Google.ProtocolBuffers
                 unknownFields.MergeFieldFrom(tag, input1);
                 input2.SkipField();
             }
-        }
+        }*/
 
         /// <summary>
         /// Test that a bug in SkipRawBytes has been fixed: if the skip
@@ -290,7 +291,7 @@ namespace Google.ProtocolBuffers
             input.PopLimit(limit);
             Assert.AreEqual(2, input.ReadRawByte());
         }
-
+        /*
         public void ReadHugeBlob()
         {
             // Allocate and initialize a 1MB blob.
@@ -318,7 +319,7 @@ namespace Google.ProtocolBuffers
                 .SetOptionalBytes(TestUtil.GetAllSet().OptionalBytes)
                 .Build();
             TestUtil.AssertAllFieldsSet(message3);
-        }
+        }*/
 
         [Test]
         public void ReadMaliciouslyLargeBlob()
@@ -348,12 +349,11 @@ namespace Google.ProtocolBuffers
         {
             if (depth == 0)
             {
-                return TestRecursiveMessage.CreateBuilder().SetI(5).Build();
+                return new TestRecursiveMessage { I = 5 };
             }
             else
             {
-                return TestRecursiveMessage.CreateBuilder()
-                    .SetA(MakeRecursiveMessage(depth - 1)).Build();
+                return new TestRecursiveMessage { A = MakeRecursiveMessage(depth - 1) };
             }
         }
 
@@ -361,12 +361,12 @@ namespace Google.ProtocolBuffers
         {
             if (depth == 0)
             {
-                Assert.IsFalse(message.HasA);
+                Assert.IsNull(message.A);
                 Assert.AreEqual(5, message.I);
             }
             else
             {
-                Assert.IsTrue(message.HasA);
+                Assert.IsNotNull(message.A);
                 AssertMessageDepth(message.A, depth - 1);
             }
         }
@@ -377,15 +377,16 @@ namespace Google.ProtocolBuffers
             ByteString data64 = MakeRecursiveMessage(64).ToByteString();
             ByteString data65 = MakeRecursiveMessage(65).ToByteString();
 
-            AssertMessageDepth(TestRecursiveMessage.ParseFrom(data64), 64);
+            AssertMessageDepth(TestRecursiveMessage.Parser.ParseFrom(data64), 64);
 
-            Assert.Throws<InvalidProtocolBufferException>(() => TestRecursiveMessage.ParseFrom(data65));
+            Assert.Throws<InvalidProtocolBufferException>(() => TestRecursiveMessage.Parser.ParseFrom(data65));
 
             CodedInputStream input = data64.CreateCodedInput();
             input.SetRecursionLimit(8);
-            Assert.Throws<InvalidProtocolBufferException>(() => TestRecursiveMessage.ParseFrom(input));
+            Assert.Throws<InvalidProtocolBufferException>(() => TestRecursiveMessage.Parser.ParseFrom(input));
         }
 
+        /*
         [Test]
         public void SizeLimit()
         {
@@ -396,7 +397,7 @@ namespace Google.ProtocolBuffers
             input.SetSizeLimit(16);
 
             Assert.Throws<InvalidProtocolBufferException>(() => TestAllTypes.ParseFrom(input));
-        }
+        }*/
 
         [Test]
         public void ResetSizeCounter()
@@ -465,17 +466,16 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        enum TestNegEnum { None = 0, Value = -2 }
+        enum TestNegEnum : long { None = 0, Value = -2 }
 
         [Test]
         public void TestNegativeEnum()
         {
             byte[] bytes = new byte[10] { 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01 };
             CodedInputStream input = CodedInputStream.CreateInstance(bytes);
-            object unk;
             TestNegEnum val = TestNegEnum.None;
 
-            Assert.IsTrue(input.ReadEnum(ref val, out unk));
+            Assert.IsTrue(input.ReadEnum(ref val));
             Assert.IsTrue(input.IsAtEnd);
             Assert.AreEqual(TestNegEnum.Value, val);
         }
@@ -487,7 +487,7 @@ namespace Google.ProtocolBuffers
             int msgSize = 1 + 1 + arraySize;
             byte[] bytes = new byte[msgSize];
             CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);
-            output.WritePackedInt32Array(8, "", arraySize, new int[] { 0, -1, -2, -3, -4, -5 });
+            output.WritePackedInt32Array(8, "", new RepeatedField<int> { 0, -1, -2, -3, -4, -5 });
 
             Assert.AreEqual(0, output.SpaceLeft);
 
@@ -497,15 +497,12 @@ namespace Google.ProtocolBuffers
             Assert.IsTrue(input.ReadTag(out tag, out name));
 
             List<TestNegEnum> values = new List<TestNegEnum>();
-            ICollection<object> unk;
-            input.ReadEnumArray(tag, name, values, out unk);
+            input.ReadEnumArray(tag, name, values);
 
-            Assert.AreEqual(2, values.Count);
+            Assert.AreEqual(6, values.Count);
             Assert.AreEqual(TestNegEnum.None, values[0]);
-            Assert.AreEqual(TestNegEnum.Value, values[1]);
-
-            Assert.NotNull(unk);
-            Assert.AreEqual(4, unk.Count);
+            Assert.AreEqual(TestNegEnum.Value, values[2]);
+            // TODO(jonskeet): Test unknown value preservation
         }
 
         [Test]
@@ -515,7 +512,7 @@ namespace Google.ProtocolBuffers
             int msgSize = arraySize;
             byte[] bytes = new byte[msgSize];
             CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);
-            output.WriteInt32Array(8, "", new int[] { 0, -1, -2, -3, -4, -5 });
+            output.WriteInt32Array(8, "", new RepeatedField<int> { 0, -1, -2, -3, -4, -5 });
 
             Assert.AreEqual(0, output.SpaceLeft);
 
@@ -525,15 +522,12 @@ namespace Google.ProtocolBuffers
             Assert.IsTrue(input.ReadTag(out tag, out name));
 
             List<TestNegEnum> values = new List<TestNegEnum>();
-            ICollection<object> unk;
-            input.ReadEnumArray(tag, name, values, out unk);
+            input.ReadEnumArray(tag, name, values);
 
-            Assert.AreEqual(2, values.Count);
+            Assert.AreEqual(6, values.Count);
             Assert.AreEqual(TestNegEnum.None, values[0]);
-            Assert.AreEqual(TestNegEnum.Value, values[1]);
-
-            Assert.NotNull(unk);
-            Assert.AreEqual(4, unk.Count);
+            Assert.AreEqual(TestNegEnum.Value, values[2]);
+            // TODO(jonskeet): Test unknown value preservation
         }
 
         //Issue 71:	CodedInputStream.ReadBytes go to slow path unnecessarily

+ 14 - 9
csharp/src/ProtocolBuffers.Test/CodedOutputStreamTest.cs

@@ -37,10 +37,10 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
-using Google.ProtocolBuffers.TestProtos;
+using Google.Protobuf.Collections;
 using NUnit.Framework;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     public class CodedOutputStreamTest
     {
@@ -195,6 +195,7 @@ namespace Google.ProtocolBuffers
                 0x9abcdef012345678UL);
         }
 
+        /*
         [Test]
         public void WriteWholeMessage()
         {
@@ -228,6 +229,7 @@ namespace Google.ProtocolBuffers
             TestUtil.AssertEqualBytes(TestUtil.GetGoldenPackedFieldsMessage().ToByteArray(),
                                       rawBytes);
         }
+        */
 
         [Test]
         public void EncodeZigZag32()
@@ -294,25 +296,27 @@ namespace Google.ProtocolBuffers
         public void TestNegativeEnumNoTag()
         {
             Assert.AreEqual(10, CodedOutputStream.ComputeInt32SizeNoTag(-2));
-            Assert.AreEqual(10, CodedOutputStream.ComputeEnumSizeNoTag(-2));
+            Assert.AreEqual(10, CodedOutputStream.ComputeEnumSizeNoTag(TestNegEnum.Value));
 
             byte[] bytes = new byte[10];
             CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);
-            output.WriteEnumNoTag(-2);
+            output.WriteEnumNoTag(TestNegEnum.Value);
 
             Assert.AreEqual(0, output.SpaceLeft);
             Assert.AreEqual("FE-FF-FF-FF-FF-FF-FF-FF-FF-01", BitConverter.ToString(bytes));
         }
 
+        enum TestNegEnum : long { None = 0, Value = -2 }
+
         [Test]
         public void TestNegativeEnumWithTag()
         {
             Assert.AreEqual(11, CodedOutputStream.ComputeInt32Size(8, -2));
-            Assert.AreEqual(11, CodedOutputStream.ComputeEnumSize(8, -2));
+            Assert.AreEqual(11, CodedOutputStream.ComputeEnumSize(8, TestNegEnum.Value));
 
             byte[] bytes = new byte[11];
             CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);
-            output.WriteEnum(8, "", -2, -2);
+            output.WriteEnum(8, "", TestNegEnum.Value);
 
             Assert.AreEqual(0, output.SpaceLeft);
             //fyi, 0x40 == 0x08 << 3 + 0, field num + wire format shift
@@ -326,7 +330,8 @@ namespace Google.ProtocolBuffers
             int msgSize = 1 + 1 + arraySize;
             byte[] bytes = new byte[msgSize];
             CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);
-            output.WritePackedEnumArray(8, "", arraySize, new int[] { 0, -1, -2, -3, -4, -5 });
+            output.WritePackedEnumArray(8, "", new RepeatedField<TestNegEnum> {
+                0, (TestNegEnum) (-1), TestNegEnum.Value, (TestNegEnum) (-3), (TestNegEnum) (-4), (TestNegEnum) (-5) });
 
             Assert.AreEqual(0, output.SpaceLeft);
 
@@ -350,8 +355,8 @@ namespace Google.ProtocolBuffers
             int msgSize = arraySize;
             byte[] bytes = new byte[msgSize];
             CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);
-            output.WriteEnumArray(8, "", new int[] { 0, -1, -2, -3, -4, -5 });
-
+            output.WriteEnumArray(8, "", new RepeatedField<TestNegEnum> {
+                0, (TestNegEnum) (-1), TestNegEnum.Value, (TestNegEnum) (-3), (TestNegEnum) (-4), (TestNegEnum) (-5) });
             Assert.AreEqual(0, output.SpaceLeft);
 
             CodedInputStream input = CodedInputStream.CreateInstance(bytes);

+ 0 - 125
csharp/src/ProtocolBuffers.Test/Collections/PopsicleListTest.cs

@@ -1,125 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers.Collections
-{
-    public class PopsicleListTest
-    {
-        [Test]
-        public void MutatingOperationsOnFrozenList()
-        {
-            PopsicleList<string> list = new PopsicleList<string>();
-            list.MakeReadOnly();
-            Assert.Throws<NotSupportedException>(() => list.Add(""));
-            Assert.Throws<NotSupportedException>(() => list.Clear());
-            Assert.Throws<NotSupportedException>(() => list.Insert(0, ""));
-            Assert.Throws<NotSupportedException>(() => list.Remove(""));
-            Assert.Throws<NotSupportedException>(() => list.RemoveAt(0));
-            Assert.Throws<NotSupportedException>(() => list.Add(new[] { "", "" }));
-        }
-
-        [Test]
-        public void NonMutatingOperationsOnFrozenList()
-        {
-            PopsicleList<string> list = new PopsicleList<string>();
-            list.MakeReadOnly();
-            Assert.IsFalse(list.Contains(""));
-            Assert.AreEqual(0, list.Count);
-            list.CopyTo(new string[5], 0);
-            list.GetEnumerator();
-            Assert.AreEqual(-1, list.IndexOf(""));
-            Assert.IsTrue(list.IsReadOnly);
-        }
-
-        [Test]
-        public void MutatingOperationsOnFluidList()
-        {
-            PopsicleList<string> list = new PopsicleList<string>();
-            list.Add("");
-            list.Clear();
-            list.Insert(0, "");
-            list.Remove("");
-            list.Add("x"); // Just to make the next call valid
-            list.RemoveAt(0);
-        }
-
-        [Test]
-        public void NonMutatingOperationsOnFluidList()
-        {
-            PopsicleList<string> list = new PopsicleList<string>();
-            Assert.IsFalse(list.Contains(""));
-            Assert.AreEqual(0, list.Count);
-            list.CopyTo(new string[5], 0);
-            list.GetEnumerator();
-            Assert.AreEqual(-1, list.IndexOf(""));
-            Assert.IsFalse(list.IsReadOnly);
-        }
-
-        [Test]
-        public void DoesNotAddNullEnumerable()
-        {
-            PopsicleList<string> list = new PopsicleList<string>();
-            Assert.Throws<ArgumentNullException>(() => list.Add((IEnumerable<string>) null));
-        }
-
-        [Test]
-        public void DoesNotAddRangeWithNull()
-        {
-            PopsicleList<string> list = new PopsicleList<string>();
-            // TODO(jonskeet): Change to ArgumentException? The argument isn't null...
-            Assert.Throws<ArgumentNullException>(() => list.Add(new[] {"a", "b", null}));
-        }
-
-        [Test]
-        public void DoesNotAddNull()
-        {
-            PopsicleList<string> list = new PopsicleList<string>();
-            Assert.Throws<ArgumentNullException>(() => list.Add((string) null));
-        }
-
-        [Test]
-        public void DoesNotSetNull()
-        {
-            PopsicleList<string> list = new PopsicleList<string>();
-            list.Add("a");
-            Assert.Throws<ArgumentNullException>(() => list[0] = null);
-        }
-    }
-}

+ 0 - 18
csharp/src/ProtocolBuffers.Test/Compatibility/BinaryCompatibilityTests.cs

@@ -1,18 +0,0 @@
-using System;
-
-namespace Google.ProtocolBuffers.Compatibility
-{
-    public class BinaryCompatibilityTests : CompatibilityTests
-    {
-        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
-        {
-            byte[] bresult = message.ToByteArray();
-            return Convert.ToBase64String(bresult);
-        }
-
-        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
-        {
-            return builder.MergeFrom((byte[])Convert.FromBase64String((string)message), registry);
-        }
-    }
-}

+ 0 - 227
csharp/src/ProtocolBuffers.Test/Compatibility/CompatibilityTests.cs

@@ -1,227 +0,0 @@
-using System;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-
-namespace Google.ProtocolBuffers.Compatibility
-{
-    /// <summary>
-    /// This abstract base implements several tests to ensure that well-known messages can be written
-    /// and read to/from various formats without losing data.  Implementations override the two serialization
-    /// methods to provide the tests with the means to read and write for a given format.
-    /// </summary>
-    public abstract class CompatibilityTests
-    {
-        protected abstract object SerializeMessage<TMessage, TBuilder>(TMessage message)
-            where TMessage : IMessageLite<TMessage, TBuilder>
-            where TBuilder : IBuilderLite<TMessage, TBuilder>;
-
-        protected abstract TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
-            where TMessage : IMessageLite<TMessage, TBuilder>
-            where TBuilder : IBuilderLite<TMessage, TBuilder>;
-
-        protected virtual void AssertOutputEquals(object lhs, object rhs)
-        {
-            Assert.AreEqual(lhs, rhs);
-        }
-
-        [Test]
-        public virtual void RoundTripWithEmptyChildMessageSize()
-        {
-            SizeMessage1 msg = SizeMessage1.CreateBuilder()
-                .SetField100(100)
-                .SetField15(SizeMessage1SubMessage.DefaultInstance)
-                .BuildPartial();
-            byte[] contents = msg.ToByteArray();
-            object content = SerializeMessage<SizeMessage1, SizeMessage1.Builder>(msg);
-
-            SizeMessage1 copy = DeserializeMessage<SizeMessage1, SizeMessage1.Builder>(content, SizeMessage1.CreateBuilder(), ExtensionRegistry.Empty).BuildPartial();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<SizeMessage1, SizeMessage1.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(contents), Convert.ToBase64String(copy.ToByteArray()));
-        }
-
-        [Test]
-        public virtual void RoundTripWithEmptyChildMessageSpeed()
-        {
-            SpeedMessage1 msg = SpeedMessage1.CreateBuilder()
-                .SetField100(100)
-                .SetField15(SpeedMessage1SubMessage.DefaultInstance)
-                .BuildPartial();
-            byte[] contents = msg.ToByteArray();
-            object content = SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(msg);
-
-            SpeedMessage1 copy = DeserializeMessage<SpeedMessage1, SpeedMessage1.Builder>(content, SpeedMessage1.CreateBuilder(), ExtensionRegistry.Empty).BuildPartial();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(contents), Convert.ToBase64String(copy.ToByteArray()));
-        }
-
-        [Test]
-        public virtual void RoundTripMessage1OptimizeSize()
-        {
-            SizeMessage1 msg = SizeMessage1.CreateBuilder().MergeFrom(TestResources.google_message1).Build();
-            object content = SerializeMessage<SizeMessage1, SizeMessage1.Builder>(msg);
-
-            SizeMessage1 copy = DeserializeMessage<SizeMessage1, SizeMessage1.Builder>(content, SizeMessage1.CreateBuilder(), ExtensionRegistry.Empty).Build();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<SizeMessage1, SizeMessage1.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(TestResources.google_message1), Convert.ToBase64String(copy.ToByteArray()));
-        }
-
-        [Test]
-        public virtual void RoundTripMessage2OptimizeSize()
-        {
-            SizeMessage2 msg = SizeMessage2.CreateBuilder().MergeFrom(TestResources.google_message2).Build();
-            object content = SerializeMessage<SizeMessage2, SizeMessage2.Builder>(msg);
-
-            SizeMessage2 copy = DeserializeMessage<SizeMessage2, SizeMessage2.Builder>(content, SizeMessage2.CreateBuilder(), ExtensionRegistry.Empty).Build();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<SizeMessage2, SizeMessage2.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(TestResources.google_message2), Convert.ToBase64String(copy.ToByteArray()));
-        }
-
-        [Test]
-        public virtual void RoundTripMessage1OptimizeSpeed()
-        {
-            SpeedMessage1 msg = SpeedMessage1.CreateBuilder().MergeFrom(TestResources.google_message1).Build();
-            object content = SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(msg);
-
-            SpeedMessage1 copy = DeserializeMessage<SpeedMessage1, SpeedMessage1.Builder>(content, SpeedMessage1.CreateBuilder(), ExtensionRegistry.Empty).Build();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(TestResources.google_message1), Convert.ToBase64String(copy.ToByteArray()));
-        }
-
-        [Test]
-        public virtual void RoundTripMessage2OptimizeSpeed()
-        {
-            SpeedMessage2 msg = SpeedMessage2.CreateBuilder().MergeFrom(TestResources.google_message2).Build();
-            object content = SerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(msg);
-
-            SpeedMessage2 copy = DeserializeMessage<SpeedMessage2, SpeedMessage2.Builder>(content, SpeedMessage2.CreateBuilder(), ExtensionRegistry.Empty).Build();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(TestResources.google_message2), Convert.ToBase64String(copy.ToByteArray()));
-        }
-
-        #region Test message builders
-
-        protected static TestAllTypes.Builder AddAllTypes(TestAllTypes.Builder builder)
-        {
-            return builder.SetOptionalInt32(1001)
-                .SetOptionalInt64(1001)
-                .SetOptionalUint32(1001)
-                .SetOptionalUint64(1001)
-                .SetOptionalSint32(-1001)
-                .SetOptionalSint64(-1001)
-                .SetOptionalFixed32(1001)
-                .SetOptionalFixed64(1001)
-                .SetOptionalSfixed32(-1001)
-                .SetOptionalSfixed64(-1001)
-                .SetOptionalFloat(1001.1001f)
-                .SetOptionalDouble(1001.1001)
-                .SetOptionalBool(true)
-                .SetOptionalString("this is a string value")
-                .SetOptionalBytes(ByteString.CopyFromUtf8("this is an array of bytes"))
-                .SetOptionalGroup(new TestAllTypes.Types.OptionalGroup.Builder().SetA(1001))
-                .SetOptionalNestedMessage(new TestAllTypes.Types.NestedMessage.Builder().SetBb(1001))
-                .SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.FOO)
-            ;
-        }
-
-        protected static TestAllTypes.Builder AddRepeatedTypes(TestAllTypes.Builder builder, int size)
-        {
-            //repeated values
-            for (int i = 0; i < size; i++)
-                builder.AddRepeatedInt32(1001 + i)
-                .AddRepeatedInt64(1001)
-                .AddRepeatedUint32(1001)
-                .AddRepeatedUint64(1001)
-                .AddRepeatedSint32(-1001)
-                .AddRepeatedSint64(-1001)
-                .AddRepeatedFixed32(1001)
-                .AddRepeatedFixed64(1001)
-                .AddRepeatedSfixed32(-1001)
-                .AddRepeatedSfixed64(-1001)
-                .AddRepeatedFloat(1001.1001f)
-                .AddRepeatedDouble(1001.1001)
-                .AddRepeatedBool(true)
-                .AddRepeatedString("this is a string value")
-                .AddRepeatedBytes(ByteString.CopyFromUtf8("this is an array of bytes"))
-                .AddRepeatedGroup(new TestAllTypes.Types.RepeatedGroup.Builder().SetA(1001))
-                .AddRepeatedNestedMessage(new TestAllTypes.Types.NestedMessage.Builder().SetBb(1001))
-                .AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.FOO)
-            ;
-            return builder;
-        }
-
-        protected static TestPackedTypes.Builder AddPackedTypes(TestPackedTypes.Builder builder, int size)
-        {
-            for(int i=0; i < size; i++ )
-                builder.AddPackedInt32(1001)
-                .AddPackedInt64(1001)
-                .AddPackedUint32(1001)
-                .AddPackedUint64(1001)
-                .AddPackedSint32(-1001)
-                .AddPackedSint64(-1001)
-                .AddPackedFixed32(1001)
-                .AddPackedFixed64(1001)
-                .AddPackedSfixed32(-1001)
-                .AddPackedSfixed64(-1001)
-                .AddPackedFloat(1001.1001f)
-                .AddPackedDouble(1001.1001)
-                .AddPackedBool(true)
-                .AddPackedEnum(ForeignEnum.FOREIGN_FOO)
-            ;
-            return builder;
-        }
-
-        #endregion
-
-        [Test]
-        public void TestRoundTripAllTypes()
-        {
-            TestAllTypes msg = AddAllTypes(new TestAllTypes.Builder()).Build();
-            object content = SerializeMessage<TestAllTypes, TestAllTypes.Builder>(msg);
-
-            TestAllTypes copy = DeserializeMessage<TestAllTypes, TestAllTypes.Builder>(content, TestAllTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<TestAllTypes, TestAllTypes.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));
-        }
-
-        [Test]
-        public void TestRoundTripRepeatedTypes()
-        {
-            TestAllTypes msg = AddRepeatedTypes(new TestAllTypes.Builder(), 5).Build();
-            object content = SerializeMessage<TestAllTypes, TestAllTypes.Builder>(msg);
-
-            TestAllTypes copy = DeserializeMessage<TestAllTypes, TestAllTypes.Builder>(content, TestAllTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<TestAllTypes, TestAllTypes.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));
-        }
-
-        [Test]
-        public void TestRoundTripPackedTypes()
-        {
-            TestPackedTypes msg = AddPackedTypes(new TestPackedTypes.Builder(), 5).Build();
-            object content = SerializeMessage<TestPackedTypes, TestPackedTypes.Builder>(msg);
-
-            TestPackedTypes copy = DeserializeMessage<TestPackedTypes, TestPackedTypes.Builder>(content, TestPackedTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();
-
-            Assert.AreEqual(msg, copy);
-            AssertOutputEquals(content, SerializeMessage<TestPackedTypes, TestPackedTypes.Builder>(copy));
-            Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));
-        }
-    }
-}

+ 0 - 35
csharp/src/ProtocolBuffers.Test/Compatibility/DictionaryCompatibilityTests.cs

@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Google.ProtocolBuffers.Serialization;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers.Compatibility
-{
-    [TestFixture]
-    public class DictionaryCompatibilityTests : CompatibilityTests
-    {
-        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
-        {
-            DictionaryWriter writer = new DictionaryWriter();
-            writer.WriteMessage(message);
-            return writer.ToDictionary();
-        }
-
-        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
-        {
-            new DictionaryReader((IDictionary<string, object>)message).Merge(builder);
-            return builder;
-        }
-
-        protected override void AssertOutputEquals(object lhs, object rhs)
-        {
-            IDictionary<string, object> left = (IDictionary<string, object>)lhs;
-            IDictionary<string, object> right = (IDictionary<string, object>)rhs;
-
-            Assert.AreEqual(
-                String.Join(",", new List<string>(left.Keys).ToArray()),
-                String.Join(",", new List<string>(right.Keys).ToArray())
-            );
-        }
-    }
-}

+ 0 - 43
csharp/src/ProtocolBuffers.Test/Compatibility/JsonCompatibilityTests.cs

@@ -1,43 +0,0 @@
-using System.IO;
-using Google.ProtocolBuffers.Serialization;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers.Compatibility
-{
-    [TestFixture]
-    public class JsonCompatibilityTests : CompatibilityTests
-    {
-        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
-        {
-            StringWriter sw = new StringWriter();
-            JsonFormatWriter.CreateInstance(sw)
-                .WriteMessage(message);
-            return sw.ToString();
-        }
-
-        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
-        {
-            JsonFormatReader.CreateInstance((string)message).Merge(builder);
-            return builder;
-        }
-    }
-
-    [TestFixture]
-    public class JsonCompatibilityFormattedTests : CompatibilityTests
-    {
-        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
-        {
-            StringWriter sw = new StringWriter();
-            JsonFormatWriter.CreateInstance(sw)
-                .Formatted()
-                .WriteMessage(message);
-            return sw.ToString();
-        }
-
-        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
-        {
-            JsonFormatReader.CreateInstance((string)message).Merge(builder);
-            return builder;
-        }
-    }
-}

+ 0 - 38
csharp/src/ProtocolBuffers.Test/Compatibility/TestResources.cs

@@ -1,38 +0,0 @@
-using System.IO;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers.Compatibility
-{
-    static class TestResources
-    {
-        public static byte[] google_message1
-        { 
-            get 
-            {
-                Stream resource = typeof(TestResources).Assembly.GetManifestResourceStream(
-                    typeof(TestResources).Namespace + ".google_message1.dat");
-
-                Assert.NotNull(resource);
-
-                byte[] bytes = new byte[resource.Length];
-                int amtRead = resource.Read(bytes, 0, bytes.Length);
-                Assert.AreEqual(bytes.Length, amtRead);
-                return bytes;
-            }
-        }
-        public static byte[] google_message2
-        {
-            get
-            {
-                Stream resource = typeof(TestResources).Assembly.GetManifestResourceStream(
-                    typeof(TestResources).Namespace + ".google_message2.dat");
-
-                Assert.NotNull(resource);
-                byte[] bytes = new byte[resource.Length];
-                int amtRead = resource.Read(bytes, 0, bytes.Length);
-                Assert.AreEqual(bytes.Length, amtRead);
-                return bytes;
-            }
-        }
-    }
-}

+ 0 - 35
csharp/src/ProtocolBuffers.Test/Compatibility/TextCompatibilityTests.cs

@@ -1,35 +0,0 @@
-using System.IO;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers.Compatibility
-{
-    [TestFixture]
-    public class TextCompatibilityTests : CompatibilityTests
-    {
-        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
-        {
-            StringWriter text = new StringWriter();
-            message.PrintTo(text);
-            return text.ToString();
-        }
-
-        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
-        {
-            TextFormat.Merge(new StringReader((string)message), registry, (IBuilder)builder);
-            return builder;
-        }
-        //This test can take a very long time to run.
-        [Test]
-        public override void RoundTripMessage2OptimizeSize()
-        {
-            //base.RoundTripMessage2OptimizeSize();
-        }
-
-        //This test can take a very long time to run.
-        [Test]
-        public override void RoundTripMessage2OptimizeSpeed()
-        {
-            //base.RoundTripMessage2OptimizeSpeed();
-        }
-    }
-}

+ 0 - 45
csharp/src/ProtocolBuffers.Test/Compatibility/XmlCompatibilityTests.cs

@@ -1,45 +0,0 @@
-using System.IO;
-using System.Xml;
-using Google.ProtocolBuffers.Serialization;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers.Compatibility
-{
-    [TestFixture]
-    public class XmlCompatibilityTests : CompatibilityTests
-    {
-        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
-        {
-            StringWriter text = new StringWriter();
-            XmlFormatWriter writer = XmlFormatWriter.CreateInstance(text);
-            writer.WriteMessage("root", message);
-            return text.ToString();
-        }
-
-        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
-        {
-            XmlFormatReader reader = XmlFormatReader.CreateInstance((string)message);
-            return reader.Merge("root", builder, registry);
-        }
-    }
-
-    [TestFixture]
-    public class XmlCompatibilityFormattedTests : CompatibilityTests
-    {
-        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)
-        {
-            StringWriter text = new StringWriter();
-            XmlWriter xwtr = XmlWriter.Create(text, new XmlWriterSettings { Indent = true, IndentChars = "  " });
-
-            XmlFormatWriter writer = XmlFormatWriter.CreateInstance(xwtr).SetOptions(XmlWriterOptions.OutputNestedArrays);
-            writer.WriteMessage("root", message);
-            return text.ToString();
-        }
-
-        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)
-        {
-            XmlFormatReader reader = XmlFormatReader.CreateInstance((string)message).SetOptions(XmlReaderOptions.ReadNestedArrays);
-            return reader.Merge("root", builder, registry);
-        }
-    }
-}

BIN
csharp/src/ProtocolBuffers.Test/Compatibility/google_message1.dat


BIN
csharp/src/ProtocolBuffers.Test/Compatibility/google_message2.dat


+ 3 - 79
csharp/src/ProtocolBuffers.Test/DeprecatedMemberTest.cs

@@ -1,9 +1,9 @@
 using System;
 using System.Reflection;
-using UnitTest.Issues.TestProtos;
+using Google.Protobuf.TestProtos;
 using NUnit.Framework;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     public class DeprecatedMemberTest
     {
@@ -16,84 +16,8 @@ namespace Google.ProtocolBuffers
         [Test]
         public void TestDepreatedPrimitiveValue()
         {
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("HasPrimitiveValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("PrimitiveValue"));
-
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("HasPrimitiveValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("PrimitiveValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearPrimitiveValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetPrimitiveValue"));
-        }
-        [Test]
-        public void TestDepreatedPrimitiveArray()
-        {
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("PrimitiveArrayList"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("PrimitiveArrayCount"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetMethod("GetPrimitiveArray"));
-
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("PrimitiveArrayList"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("PrimitiveArrayCount"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("GetPrimitiveArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetPrimitiveArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddPrimitiveArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddRangePrimitiveArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearPrimitiveArray"));
-        }
-        [Test]
-        public void TestDepreatedMessageValue()
-        {
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("HasMessageValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("MessageValue"));
-
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("HasMessageValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("MessageValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("MergeMessageValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearMessageValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetMessageValue", new[] { typeof(DeprecatedChild) }));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetMessageValue", new[] { typeof(DeprecatedChild.Builder) }));
-        }
-        [Test]
-        public void TestDepreatedMessageArray()
-        {
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("MessageArrayList"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("MessageArrayCount"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetMethod("GetMessageArray"));
-
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("MessageArrayList"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("MessageArrayCount"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("GetMessageArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetMessageArray", new[] { typeof(int), typeof(DeprecatedChild) }));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetMessageArray", new[] { typeof(int), typeof(DeprecatedChild.Builder) }));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddMessageArray", new[] { typeof(DeprecatedChild) }));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddMessageArray", new[] { typeof(DeprecatedChild.Builder) }));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddRangeMessageArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearMessageArray"));
-        }
-        [Test]
-        public void TestDepreatedEnumValue()
-        {
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("HasEnumValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("EnumValue"));
-
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("HasEnumValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("EnumValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearEnumValue"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetEnumValue"));
+            AssertIsDeprecated(typeof(TestDeprecatedFields).GetProperty("DeprecatedInt32"));
         }
-        [Test]
-        public void TestDepreatedEnumArray()
-        {
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("EnumArrayList"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("EnumArrayCount"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetMethod("GetEnumArray"));
 
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("EnumArrayList"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("EnumArrayCount"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("GetEnumArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetEnumArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddEnumArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddRangeEnumArray"));
-            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearEnumArray"));
-        }
     }
 }

+ 38 - 114
csharp/src/ProtocolBuffers.Test/DescriptorsTest.cs

@@ -34,11 +34,11 @@
 
 #endregion
 
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos;
+using Google.Protobuf.Descriptors;
+using Google.Protobuf.TestProtos;
 using NUnit.Framework;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     /// <summary>
     /// Tests for descriptors. (Not in its own namespace or broken up into individual classes as the
@@ -49,21 +49,21 @@ namespace Google.ProtocolBuffers
         [Test]
         public void FileDescriptor()
         {
-            FileDescriptor file = Unittest.Descriptor;
+            FileDescriptor file = UnittestProto3.Descriptor;
 
-            Assert.AreEqual("google/protobuf/unittest.proto", file.Name);
+            Assert.AreEqual("google/protobuf/unittest_proto3.proto", file.Name);
             Assert.AreEqual("protobuf_unittest", file.Package);
 
             Assert.AreEqual("UnittestProto", file.Options.JavaOuterClassname);
-            Assert.AreEqual("google/protobuf/unittest.proto", file.Proto.Name);
+            Assert.AreEqual("google/protobuf/unittest_proto3.proto", file.Proto.Name);
 
             // unittest.proto doesn't have any public imports, but unittest_import.proto does.
             Assert.AreEqual(0, file.PublicDependencies.Count);
-            Assert.AreEqual(1, UnittestImport.Descriptor.PublicDependencies.Count);
-            Assert.AreEqual(UnittestImportPublic.Descriptor, UnittestImport.Descriptor.PublicDependencies[0]);
+            Assert.AreEqual(1, UnittestImportProto3.Descriptor.PublicDependencies.Count);
+            Assert.AreEqual(UnittestImportPublicProto3.Descriptor, UnittestImportProto3.Descriptor.PublicDependencies[0]);
 
             Assert.AreEqual(1, file.Dependencies.Count);
-            Assert.AreEqual(UnittestImport.Descriptor, file.Dependencies[0]);
+            Assert.AreEqual(UnittestImportProto3.Descriptor, file.Dependencies[0]);
 
             MessageDescriptor messageType = TestAllTypes.Descriptor;
             Assert.AreEqual(messageType, file.MessageTypes[0]);
@@ -78,23 +78,12 @@ namespace Google.ProtocolBuffers
             Assert.AreEqual(file.EnumTypes[0], file.FindTypeByName<EnumDescriptor>("ForeignEnum"));
             Assert.Null(file.FindTypeByName<EnumDescriptor>("NoSuchType"));
             Assert.Null(file.FindTypeByName<EnumDescriptor>("protobuf_unittest.ForeignEnum"));
-            Assert.AreEqual(1, UnittestImport.Descriptor.EnumTypes.Count);
-            Assert.AreEqual("ImportEnum", UnittestImport.Descriptor.EnumTypes[0].Name);
+            Assert.AreEqual(1, UnittestImportProto3.Descriptor.EnumTypes.Count);
+            Assert.AreEqual("ImportEnum", UnittestImportProto3.Descriptor.EnumTypes[0].Name);
             for (int i = 0; i < file.EnumTypes.Count; i++)
             {
                 Assert.AreEqual(i, file.EnumTypes[i].Index);
             }
-
-            FieldDescriptor extension = Unittest.OptionalInt32Extension.Descriptor;
-            Assert.AreEqual(extension, file.Extensions[0]);
-            Assert.AreEqual(extension, file.FindTypeByName<FieldDescriptor>("optional_int32_extension"));
-            Assert.Null(file.FindTypeByName<FieldDescriptor>("no_such_ext"));
-            Assert.Null(file.FindTypeByName<FieldDescriptor>("protobuf_unittest.optional_int32_extension"));
-            Assert.AreEqual(0, UnittestImport.Descriptor.Extensions.Count);
-            for (int i = 0; i < file.Extensions.Count; i++)
-            {
-                Assert.AreEqual(i, file.Extensions[i].Index);
-            }
         }
 
         [Test]
@@ -105,19 +94,20 @@ namespace Google.ProtocolBuffers
 
             Assert.AreEqual("TestAllTypes", messageType.Name);
             Assert.AreEqual("protobuf_unittest.TestAllTypes", messageType.FullName);
-            Assert.AreEqual(Unittest.Descriptor, messageType.File);
-            Assert.Null(messageType.ContainingType);
-            Assert.AreEqual(DescriptorProtos.MessageOptions.DefaultInstance, messageType.Options);
-            Assert.AreEqual("TestAllTypes", messageType.Proto.Name);
+            Assert.AreEqual(UnittestProto3.Descriptor, messageType.File);
+            Assert.IsNull(messageType.ContainingType);
+            Assert.IsNull(messageType.Options);
+
+            Assert.AreEqual("TestAllTypes", messageType.Name);
 
             Assert.AreEqual("NestedMessage", nestedType.Name);
             Assert.AreEqual("protobuf_unittest.TestAllTypes.NestedMessage", nestedType.FullName);
-            Assert.AreEqual(Unittest.Descriptor, nestedType.File);
+            Assert.AreEqual(UnittestProto3.Descriptor, nestedType.File);
             Assert.AreEqual(messageType, nestedType.ContainingType);
 
             FieldDescriptor field = messageType.Fields[0];
-            Assert.AreEqual("optional_int32", field.Name);
-            Assert.AreEqual(field, messageType.FindDescriptor<FieldDescriptor>("optional_int32"));
+            Assert.AreEqual("single_int32", field.Name);
+            Assert.AreEqual(field, messageType.FindDescriptor<FieldDescriptor>("single_int32"));
             Assert.Null(messageType.FindDescriptor<FieldDescriptor>("no_such_field"));
             Assert.AreEqual(field, messageType.FindFieldByNumber(1));
             Assert.Null(messageType.FindFieldByNumber(571283));
@@ -146,115 +136,66 @@ namespace Google.ProtocolBuffers
         public void FieldDescriptor()
         {
             MessageDescriptor messageType = TestAllTypes.Descriptor;
-            FieldDescriptor primitiveField = messageType.FindDescriptor<FieldDescriptor>("optional_int32");
-            FieldDescriptor enumField = messageType.FindDescriptor<FieldDescriptor>("optional_nested_enum");
-            FieldDescriptor messageField = messageType.FindDescriptor<FieldDescriptor>("optional_foreign_message");
-            FieldDescriptor cordField = messageType.FindDescriptor<FieldDescriptor>("optional_cord");
-            FieldDescriptor extension = Unittest.OptionalInt32Extension.Descriptor;
-            FieldDescriptor nestedExtension = TestRequired.Single.Descriptor;
+            FieldDescriptor primitiveField = messageType.FindDescriptor<FieldDescriptor>("single_int32");
+            FieldDescriptor enumField = messageType.FindDescriptor<FieldDescriptor>("single_nested_enum");
+            FieldDescriptor messageField = messageType.FindDescriptor<FieldDescriptor>("single_foreign_message");
 
-            Assert.AreEqual("optional_int32", primitiveField.Name);
-            Assert.AreEqual("protobuf_unittest.TestAllTypes.optional_int32",
+            Assert.AreEqual("single_int32", primitiveField.Name);
+            Assert.AreEqual("protobuf_unittest.TestAllTypes.single_int32",
                             primitiveField.FullName);
             Assert.AreEqual(1, primitiveField.FieldNumber);
             Assert.AreEqual(messageType, primitiveField.ContainingType);
-            Assert.AreEqual(Unittest.Descriptor, primitiveField.File);
+            Assert.AreEqual(UnittestProto3.Descriptor, primitiveField.File);
             Assert.AreEqual(FieldType.Int32, primitiveField.FieldType);
             Assert.AreEqual(MappedType.Int32, primitiveField.MappedType);
-            Assert.AreEqual(DescriptorProtos.FieldOptions.DefaultInstance, primitiveField.Options);
-            Assert.IsFalse(primitiveField.IsExtension);
-            Assert.AreEqual("optional_int32", primitiveField.Proto.Name);
-
-            Assert.AreEqual("optional_nested_enum", enumField.Name);
+            Assert.IsNull(primitiveField.Options);
+            
+            Assert.AreEqual("single_nested_enum", enumField.Name);
             Assert.AreEqual(FieldType.Enum, enumField.FieldType);
             Assert.AreEqual(MappedType.Enum, enumField.MappedType);
             // Assert.AreEqual(TestAllTypes.Types.NestedEnum.DescriptorProtoFile, enumField.EnumType);
 
-            Assert.AreEqual("optional_foreign_message", messageField.Name);
+            Assert.AreEqual("single_foreign_message", messageField.Name);
             Assert.AreEqual(FieldType.Message, messageField.FieldType);
             Assert.AreEqual(MappedType.Message, messageField.MappedType);
             Assert.AreEqual(ForeignMessage.Descriptor, messageField.MessageType);
-
-            Assert.AreEqual("optional_cord", cordField.Name);
-            Assert.AreEqual(FieldType.String, cordField.FieldType);
-            Assert.AreEqual(MappedType.String, cordField.MappedType);
-            Assert.AreEqual(DescriptorProtos.FieldOptions.Types.CType.CORD, cordField.Options.Ctype);
-
-            Assert.AreEqual("optional_int32_extension", extension.Name);
-            Assert.AreEqual("protobuf_unittest.optional_int32_extension", extension.FullName);
-            Assert.AreEqual(1, extension.FieldNumber);
-            Assert.AreEqual(TestAllExtensions.Descriptor, extension.ContainingType);
-            Assert.AreEqual(Unittest.Descriptor, extension.File);
-            Assert.AreEqual(FieldType.Int32, extension.FieldType);
-            Assert.AreEqual(MappedType.Int32, extension.MappedType);
-            Assert.AreEqual(DescriptorProtos.FieldOptions.DefaultInstance,
-                            extension.Options);
-            Assert.IsTrue(extension.IsExtension);
-            Assert.AreEqual(null, extension.ExtensionScope);
-            Assert.AreEqual("optional_int32_extension", extension.Proto.Name);
-
-            Assert.AreEqual("single", nestedExtension.Name);
-            Assert.AreEqual("protobuf_unittest.TestRequired.single",
-                            nestedExtension.FullName);
-            Assert.AreEqual(TestRequired.Descriptor,
-                            nestedExtension.ExtensionScope);
         }
 
         [Test]
         public void FieldDescriptorLabel()
         {
-            FieldDescriptor requiredField =
-                TestRequired.Descriptor.FindDescriptor<FieldDescriptor>("a");
-            FieldDescriptor optionalField =
-                TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("optional_int32");
+            FieldDescriptor singleField =
+                TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("single_int32");
             FieldDescriptor repeatedField =
                 TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("repeated_int32");
 
-            Assert.IsTrue(requiredField.IsRequired);
-            Assert.IsFalse(requiredField.IsRepeated);
-            Assert.IsFalse(optionalField.IsRequired);
-            Assert.IsFalse(optionalField.IsRepeated);
+            Assert.IsFalse(singleField.IsRequired);
+            Assert.IsFalse(singleField.IsRepeated);
             Assert.IsFalse(repeatedField.IsRequired);
             Assert.IsTrue(repeatedField.IsRepeated);
         }
-        [Test]
-        public void FieldDescriptorDefault()
-        {
-            MessageDescriptor d = TestAllTypes.Descriptor;
-            Assert.IsFalse(d.FindDescriptor<FieldDescriptor>("optional_int32").HasDefaultValue);
-            Assert.AreEqual(0, d.FindDescriptor<FieldDescriptor>("optional_int32").DefaultValue);
-            Assert.IsTrue(d.FindDescriptor<FieldDescriptor>("default_int32").HasDefaultValue);
-            Assert.AreEqual(41, d.FindDescriptor<FieldDescriptor>("default_int32").DefaultValue);
-
-            d = TestExtremeDefaultValues.Descriptor;
-            Assert.AreEqual(TestExtremeDefaultValues.DefaultInstance.EscapedBytes,
-                d.FindDescriptor<FieldDescriptor>("escaped_bytes").DefaultValue);
 
-            Assert.AreEqual(uint.MaxValue, d.FindDescriptor<FieldDescriptor>("large_uint32").DefaultValue);
-            Assert.AreEqual(ulong.MaxValue, d.FindDescriptor<FieldDescriptor>("large_uint64").DefaultValue);
-        }
         [Test]
         public void EnumDescriptor()
         {
             // Note: this test is a bit different to the Java version because there's no static way of getting to the descriptor
-            EnumDescriptor enumType = Unittest.Descriptor.FindTypeByName<EnumDescriptor>("ForeignEnum");
+            EnumDescriptor enumType = UnittestProto3.Descriptor.FindTypeByName<EnumDescriptor>("ForeignEnum");
             EnumDescriptor nestedType = TestAllTypes.Descriptor.FindDescriptor<EnumDescriptor>("NestedEnum");
 
             Assert.AreEqual("ForeignEnum", enumType.Name);
             Assert.AreEqual("protobuf_unittest.ForeignEnum", enumType.FullName);
-            Assert.AreEqual(Unittest.Descriptor, enumType.File);
+            Assert.AreEqual(UnittestProto3.Descriptor, enumType.File);
             Assert.Null(enumType.ContainingType);
-            Assert.AreEqual(DescriptorProtos.EnumOptions.DefaultInstance,
-                            enumType.Options);
+            Assert.Null(enumType.Options);
 
             Assert.AreEqual("NestedEnum", nestedType.Name);
             Assert.AreEqual("protobuf_unittest.TestAllTypes.NestedEnum",
                             nestedType.FullName);
-            Assert.AreEqual(Unittest.Descriptor, nestedType.File);
+            Assert.AreEqual(UnittestProto3.Descriptor, nestedType.File);
             Assert.AreEqual(TestAllTypes.Descriptor, nestedType.ContainingType);
 
             EnumValueDescriptor value = enumType.FindValueByName("FOREIGN_FOO");
-            Assert.AreEqual(value, enumType.Values[0]);
+            Assert.AreEqual(value, enumType.Values[1]);
             Assert.AreEqual("FOREIGN_FOO", value.Name);
             Assert.AreEqual(4, value.Number);
             Assert.AreEqual((int) ForeignEnum.FOREIGN_FOO, value.Number);
@@ -265,22 +206,5 @@ namespace Google.ProtocolBuffers
                 Assert.AreEqual(i, enumType.Values[i].Index);
             }
         }
-        
-
-        [Test]
-        public void CustomOptions()
-        {
-            MessageDescriptor descriptor = TestMessageWithCustomOptions.Descriptor;
-            Assert.IsTrue(descriptor.Options.HasExtension(UnittestCustomOptions.MessageOpt1));
-            Assert.AreEqual(-56, descriptor.Options.GetExtension(UnittestCustomOptions.MessageOpt1));
-
-
-            FieldDescriptor field = descriptor.FindFieldByName("field1");
-            Assert.NotNull(field);
-
-            Assert.IsTrue(field.Options.HasExtension(UnittestCustomOptions.FieldOpt1));
-            Assert.AreEqual(8765432109uL, field.Options.GetExtension(UnittestCustomOptions.FieldOpt1));
-            
-        }
     }
 }

+ 0 - 276
csharp/src/ProtocolBuffers.Test/DynamicMessageTest.cs

@@ -1,276 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class DynamicMessageTest
-    {
-        private ReflectionTester reflectionTester;
-        private ReflectionTester extensionsReflectionTester;
-        private ReflectionTester packedReflectionTester;
-
-        public DynamicMessageTest()
-        {
-            reflectionTester = ReflectionTester.CreateTestAllTypesInstance();
-            extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance();
-            packedReflectionTester = ReflectionTester.CreateTestPackedTypesInstance();
-        }
-
-        [Test]
-        public void DynamicMessageAccessors()
-        {
-            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            IMessage message = builder.WeakBuild();
-            reflectionTester.AssertAllFieldsSetViaReflection(message);
-        }
-
-        [Test]
-        public void DoubleBuildError()
-        {
-            DynamicMessage.Builder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            builder.Build();
-            Assert.Throws<InvalidOperationException>(() => builder.Build());
-        }
-
-        [Test]
-        public void DynamicMessageSettersRejectNull()
-        {
-            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            reflectionTester.AssertReflectionSettersRejectNull(builder);
-        }
-
-        [Test]
-        public void DynamicMessageExtensionAccessors()
-        {
-            // We don't need to extensively test DynamicMessage's handling of
-            // extensions because, frankly, it doesn't do anything special with them.
-            // It treats them just like any other fields.
-            IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor);
-            extensionsReflectionTester.SetAllFieldsViaReflection(builder);
-            IMessage message = builder.WeakBuild();
-            extensionsReflectionTester.AssertAllFieldsSetViaReflection(message);
-        }
-
-        [Test]
-        public void DynamicMessageExtensionSettersRejectNull()
-        {
-            IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor);
-            extensionsReflectionTester.AssertReflectionSettersRejectNull(builder);
-        }
-
-        [Test]
-        public void DynamicMessageRepeatedSetters()
-        {
-            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            reflectionTester.ModifyRepeatedFieldsViaReflection(builder);
-            IMessage message = builder.WeakBuild();
-            reflectionTester.AssertRepeatedFieldsModifiedViaReflection(message);
-        }
-
-        [Test]
-        public void DynamicMessageRepeatedSettersRejectNull()
-        {
-            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            reflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);
-        }
-
-        [Test]
-        public void DynamicMessageDefaults()
-        {
-            reflectionTester.AssertClearViaReflection(DynamicMessage.GetDefaultInstance(TestAllTypes.Descriptor));
-            reflectionTester.AssertClearViaReflection(DynamicMessage.CreateBuilder(TestAllTypes.Descriptor).Build());
-        }
-
-        [Test]
-        public void DynamicMessageSerializedSize()
-        {
-            TestAllTypes message = TestUtil.GetAllSet();
-
-            IBuilder dynamicBuilder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            reflectionTester.SetAllFieldsViaReflection(dynamicBuilder);
-            IMessage dynamicMessage = dynamicBuilder.WeakBuild();
-
-            Assert.AreEqual(message.SerializedSize, dynamicMessage.SerializedSize);
-        }
-
-        [Test]
-        public void DynamicMessageSerialization()
-        {
-            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            IMessage message = builder.WeakBuild();
-
-            ByteString rawBytes = message.ToByteString();
-            TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);
-
-            TestUtil.AssertAllFieldsSet(message2);
-
-            // In fact, the serialized forms should be exactly the same, byte-for-byte.
-            Assert.AreEqual(TestUtil.GetAllSet().ToByteString(), rawBytes);
-        }
-
-        [Test]
-        public void DynamicMessageParsing()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TestUtil.SetAllFields(builder);
-            TestAllTypes message = builder.Build();
-
-            ByteString rawBytes = message.ToByteString();
-
-            IMessage message2 = DynamicMessage.ParseFrom(TestAllTypes.Descriptor, rawBytes);
-            reflectionTester.AssertAllFieldsSetViaReflection(message2);
-        }
-
-        [Test]
-        public void DynamicMessagePackedSerialization()
-        {
-            IBuilder builder = DynamicMessage.CreateBuilder(TestPackedTypes.Descriptor);
-            packedReflectionTester.SetPackedFieldsViaReflection(builder);
-            IMessage message = builder.WeakBuild();
-
-            ByteString rawBytes = message.ToByteString();
-            TestPackedTypes message2 = TestPackedTypes.ParseFrom(rawBytes);
-
-            TestUtil.AssertPackedFieldsSet(message2);
-
-            // In fact, the serialized forms should be exactly the same, byte-for-byte.
-            Assert.AreEqual(TestUtil.GetPackedSet().ToByteString(), rawBytes);
-        }
-
-        [Test]
-        public void DynamicMessagePackedParsing()
-        {
-            TestPackedTypes.Builder builder = TestPackedTypes.CreateBuilder();
-            TestUtil.SetPackedFields(builder);
-            TestPackedTypes message = builder.Build();
-
-            ByteString rawBytes = message.ToByteString();
-
-            IMessage message2 = DynamicMessage.ParseFrom(TestPackedTypes.Descriptor, rawBytes);
-            packedReflectionTester.AssertPackedFieldsSetViaReflection(message2);
-        }
-
-        [Test]
-        public void DynamicMessageCopy()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TestUtil.SetAllFields(builder);
-            TestAllTypes message = builder.Build();
-
-            DynamicMessage copy = DynamicMessage.CreateBuilder(message).Build();
-            reflectionTester.AssertAllFieldsSetViaReflection(copy);
-
-            // Oneof
-            FieldDescriptor bytesField =
-                TestAllTypes.Descriptor.FindFieldByName("oneof_bytes");
-            FieldDescriptor uint32Field =
-                TestAllTypes.Descriptor.FindFieldByName("oneof_uint32");
-            Assert.True(copy.HasField(bytesField));
-            Assert.False(copy.HasField(uint32Field));
-
-            DynamicMessage.Builder dynamicBuilder = DynamicMessage.CreateBuilder(message);
-            dynamicBuilder[uint32Field] = 123U;
-            DynamicMessage copy2 = dynamicBuilder.Build();
-            Assert.IsFalse(copy2.HasField(bytesField));
-            Assert.IsTrue(copy2.HasField(uint32Field));
-            Assert.AreEqual(123U, copy2[uint32Field]);
-        }
-
-        [Test]
-        public void ToBuilder()
-        {
-            DynamicMessage.Builder builder =
-                DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            int unknownFieldNum = 9;
-            ulong unknownFieldVal = 90;
-            builder.SetUnknownFields(UnknownFieldSet.CreateBuilder()
-                                         .AddField(unknownFieldNum,
-                                                   UnknownField.CreateBuilder().AddVarint(unknownFieldVal).Build())
-                                         .Build());
-            DynamicMessage message = builder.Build();
-
-            DynamicMessage derived = message.ToBuilder().Build();
-            reflectionTester.AssertAllFieldsSetViaReflection(derived);
-
-            IList<ulong> values = derived.UnknownFields.FieldDictionary[unknownFieldNum].VarintList;
-            Assert.AreEqual(1, values.Count);
-            Assert.AreEqual(unknownFieldVal, values[0]);
-        }
-
-        [Test]
-        public void DynamicOneofMessage()
-        {
-            DynamicMessage.Builder builder =
-                DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            OneofDescriptor oneof = TestAllTypes.Descriptor.Oneofs[0];
-            Assert.False(builder.HasOneof(oneof));
-            Assert.AreSame(null, builder.OneofFieldDescriptor(oneof));
-
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            Assert.True(builder.HasOneof(oneof));
-            FieldDescriptor field = oneof.Field(3);
-            Assert.AreSame(field, builder.OneofFieldDescriptor(oneof));
-            Assert.AreEqual(TestUtil.ToBytes("604"), builder[field]);
-
-            DynamicMessage message = builder.BuildPartial();
-            Assert.IsTrue(message.HasOneof(oneof));
-            
-            DynamicMessage.Builder mergedBuilder =
-                DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);
-            FieldDescriptor mergedField = oneof.Field(0);
-            mergedBuilder[mergedField] = 123U;
-            Assert.IsTrue(mergedBuilder.HasField(mergedField));
-            mergedBuilder.MergeFrom(message);
-            Assert.IsTrue(mergedBuilder.HasField(field));
-            Assert.IsFalse(mergedBuilder.HasField(mergedField));
-
-            mergedBuilder.ClearOneof(oneof);
-            Assert.AreSame(null, mergedBuilder.OneofFieldDescriptor(oneof));
-            message = mergedBuilder.Build();
-            Assert.AreSame(null, message.OneofFieldDescriptor(oneof));
-        }
-    }
-}

+ 0 - 200
csharp/src/ProtocolBuffers.Test/ExtendableMessageTest.cs

@@ -1,200 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class ExtendableMessageTest
-    {
-        [Test]
-        public void ExtensionWriterInvalidExtension()
-        {
-            Assert.Throws<ArgumentException>(() =>
-                TestPackedExtensions.CreateBuilder()[Unittest.OptionalForeignMessageExtension.Descriptor] =
-                    ForeignMessage.DefaultInstance);
-        }
-
-        [Test]
-        public void ExtensionWriterTest()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder()
-                .SetExtension(Unittest.DefaultBoolExtension, true)
-                .SetExtension(Unittest.DefaultBytesExtension, ByteString.CopyFromUtf8("123"))
-                .SetExtension(Unittest.DefaultCordExtension, "123")
-                .SetExtension(Unittest.DefaultDoubleExtension, 123)
-                .SetExtension(Unittest.DefaultFixed32Extension, 123u)
-                .SetExtension(Unittest.DefaultFixed64Extension, 123u)
-                .SetExtension(Unittest.DefaultFloatExtension, 123)
-                .SetExtension(Unittest.DefaultForeignEnumExtension, ForeignEnum.FOREIGN_BAZ)
-                .SetExtension(Unittest.DefaultImportEnumExtension, ImportEnum.IMPORT_BAZ)
-                .SetExtension(Unittest.DefaultInt32Extension, 123)
-                .SetExtension(Unittest.DefaultInt64Extension, 123)
-                .SetExtension(Unittest.DefaultNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO)
-                .SetExtension(Unittest.DefaultSfixed32Extension, 123)
-                .SetExtension(Unittest.DefaultSfixed64Extension, 123)
-                .SetExtension(Unittest.DefaultSint32Extension, 123)
-                .SetExtension(Unittest.DefaultSint64Extension, 123)
-                .SetExtension(Unittest.DefaultStringExtension, "123")
-                .SetExtension(Unittest.DefaultStringPieceExtension, "123")
-                .SetExtension(Unittest.DefaultUint32Extension, 123u)
-                .SetExtension(Unittest.DefaultUint64Extension, 123u)
-                //Optional
-                .SetExtension(Unittest.OptionalBoolExtension, true)
-                .SetExtension(Unittest.OptionalBytesExtension, ByteString.CopyFromUtf8("123"))
-                .SetExtension(Unittest.OptionalCordExtension, "123")
-                .SetExtension(Unittest.OptionalDoubleExtension, 123)
-                .SetExtension(Unittest.OptionalFixed32Extension, 123u)
-                .SetExtension(Unittest.OptionalFixed64Extension, 123u)
-                .SetExtension(Unittest.OptionalFloatExtension, 123)
-                .SetExtension(Unittest.OptionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ)
-                .SetExtension(Unittest.OptionalImportEnumExtension, ImportEnum.IMPORT_BAZ)
-                .SetExtension(Unittest.OptionalInt32Extension, 123)
-                .SetExtension(Unittest.OptionalInt64Extension, 123)
-                .SetExtension(Unittest.OptionalNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO)
-                .SetExtension(Unittest.OptionalSfixed32Extension, 123)
-                .SetExtension(Unittest.OptionalSfixed64Extension, 123)
-                .SetExtension(Unittest.OptionalSint32Extension, 123)
-                .SetExtension(Unittest.OptionalSint64Extension, 123)
-                .SetExtension(Unittest.OptionalStringExtension, "123")
-                .SetExtension(Unittest.OptionalStringPieceExtension, "123")
-                .SetExtension(Unittest.OptionalUint32Extension, 123u)
-                .SetExtension(Unittest.OptionalUint64Extension, 123u)
-                //Repeated
-                .AddExtension(Unittest.RepeatedBoolExtension, true)
-                .AddExtension(Unittest.RepeatedBytesExtension, ByteString.CopyFromUtf8("123"))
-                .AddExtension(Unittest.RepeatedCordExtension, "123")
-                .AddExtension(Unittest.RepeatedDoubleExtension, 123)
-                .AddExtension(Unittest.RepeatedFixed32Extension, 123u)
-                .AddExtension(Unittest.RepeatedFixed64Extension, 123u)
-                .AddExtension(Unittest.RepeatedFloatExtension, 123)
-                .AddExtension(Unittest.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ)
-                .AddExtension(Unittest.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAZ)
-                .AddExtension(Unittest.RepeatedInt32Extension, 123)
-                .AddExtension(Unittest.RepeatedInt64Extension, 123)
-                .AddExtension(Unittest.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO)
-                .AddExtension(Unittest.RepeatedSfixed32Extension, 123)
-                .AddExtension(Unittest.RepeatedSfixed64Extension, 123)
-                .AddExtension(Unittest.RepeatedSint32Extension, 123)
-                .AddExtension(Unittest.RepeatedSint64Extension, 123)
-                .AddExtension(Unittest.RepeatedStringExtension, "123")
-                .AddExtension(Unittest.RepeatedStringPieceExtension, "123")
-                .AddExtension(Unittest.RepeatedUint32Extension, 123u)
-                .AddExtension(Unittest.RepeatedUint64Extension, 123u)
-                ;
-            TestAllExtensions msg = builder.Build();
-
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            Unittest.RegisterAllExtensions(registry);
-
-            TestAllExtensions.Builder copyBuilder = TestAllExtensions.CreateBuilder().MergeFrom(msg.ToByteArray(),
-                                                                                                registry);
-            TestAllExtensions copy = copyBuilder.Build();
-
-            Assert.AreEqual(msg.ToByteArray(), copy.ToByteArray());
-
-            Assert.AreEqual(true, copy.GetExtension(Unittest.DefaultBoolExtension));
-            Assert.AreEqual(ByteString.CopyFromUtf8("123"), copy.GetExtension(Unittest.DefaultBytesExtension));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.DefaultCordExtension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.DefaultDoubleExtension));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.DefaultFixed32Extension));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.DefaultFixed64Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.DefaultFloatExtension));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, copy.GetExtension(Unittest.DefaultForeignEnumExtension));
-            Assert.AreEqual(ImportEnum.IMPORT_BAZ, copy.GetExtension(Unittest.DefaultImportEnumExtension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.DefaultInt32Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.DefaultInt64Extension));
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
-                            copy.GetExtension(Unittest.DefaultNestedEnumExtension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.DefaultSfixed32Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.DefaultSfixed64Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.DefaultSint32Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.DefaultSint64Extension));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.DefaultStringExtension));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.DefaultStringPieceExtension));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.DefaultUint32Extension));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.DefaultUint64Extension));
-
-            Assert.AreEqual(true, copy.GetExtension(Unittest.OptionalBoolExtension));
-            Assert.AreEqual(ByteString.CopyFromUtf8("123"), copy.GetExtension(Unittest.OptionalBytesExtension));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.OptionalCordExtension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.OptionalDoubleExtension));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.OptionalFixed32Extension));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.OptionalFixed64Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.OptionalFloatExtension));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, copy.GetExtension(Unittest.OptionalForeignEnumExtension));
-            Assert.AreEqual(ImportEnum.IMPORT_BAZ, copy.GetExtension(Unittest.OptionalImportEnumExtension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.OptionalInt32Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.OptionalInt64Extension));
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
-                            copy.GetExtension(Unittest.OptionalNestedEnumExtension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.OptionalSfixed32Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.OptionalSfixed64Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.OptionalSint32Extension));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.OptionalSint64Extension));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.OptionalStringExtension));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.OptionalStringPieceExtension));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.OptionalUint32Extension));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.OptionalUint64Extension));
-
-            Assert.AreEqual(true, copy.GetExtension(Unittest.RepeatedBoolExtension, 0));
-            Assert.AreEqual(ByteString.CopyFromUtf8("123"),
-                            copy.GetExtension(Unittest.RepeatedBytesExtension, 0));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.RepeatedCordExtension, 0));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.RepeatedDoubleExtension, 0));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.RepeatedFixed32Extension, 0));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.RepeatedFixed64Extension, 0));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.RepeatedFloatExtension, 0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ,
-                            copy.GetExtension(Unittest.RepeatedForeignEnumExtension, 0));
-            Assert.AreEqual(ImportEnum.IMPORT_BAZ, copy.GetExtension(Unittest.RepeatedImportEnumExtension, 0));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.RepeatedInt32Extension, 0));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.RepeatedInt64Extension, 0));
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
-                            copy.GetExtension(Unittest.RepeatedNestedEnumExtension, 0));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.RepeatedSfixed32Extension, 0));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.RepeatedSfixed64Extension, 0));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.RepeatedSint32Extension, 0));
-            Assert.AreEqual(123, copy.GetExtension(Unittest.RepeatedSint64Extension, 0));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.RepeatedStringExtension, 0));
-            Assert.AreEqual("123", copy.GetExtension(Unittest.RepeatedStringPieceExtension, 0));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.RepeatedUint32Extension, 0));
-            Assert.AreEqual(123u, copy.GetExtension(Unittest.RepeatedUint64Extension, 0));
-        }
-    }
-}

+ 0 - 198
csharp/src/ProtocolBuffers.Test/FieldPresenceTest.cs

@@ -1,198 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2015 Google Inc.  All rights reserved.
-// Author: jieluo@google.com (Jie Luo)
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos.Proto3;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class FieldPresenceTest
-    {
-        private void CheckHasMethodRemoved(Type proto2Type, Type proto3Type, string name)
-        {
-            Assert.NotNull(proto2Type.GetProperty(name));
-            Assert.NotNull(proto2Type.GetProperty("Has" + name));
-            Assert.NotNull(proto3Type.GetProperty(name));
-            Assert.Null(proto3Type.GetProperty("Has" + name));
-        }
-
-        [Test]
-        public void TestHasMethod()
-        {
-            // Optional non-message fields don't have HasFoo method generated
-            Type proto2Type = typeof(Google.ProtocolBuffers.TestProtos.TestAllTypes);
-            Type proto3Type = typeof(TestAllTypes);
-            CheckHasMethodRemoved(proto2Type, proto3Type, "OptionalInt32");
-            CheckHasMethodRemoved(proto2Type, proto3Type, "OptionalString");
-            CheckHasMethodRemoved(proto2Type, proto3Type, "OptionalBytes");
-            CheckHasMethodRemoved(proto2Type, proto3Type, "OptionalNestedEnum");
-            
-            Type proto2BuilderType = typeof(Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder);
-            Type proto3BuilderType = typeof(TestAllTypes.Builder);
-            CheckHasMethodRemoved(proto2BuilderType, proto3BuilderType, "OptionalInt32");
-            CheckHasMethodRemoved(proto2BuilderType, proto3BuilderType, "OptionalString");
-            CheckHasMethodRemoved(proto2BuilderType, proto3BuilderType, "OptionalBytes");
-            CheckHasMethodRemoved(proto2BuilderType, proto3BuilderType, "OptionalNestedEnum");
-
-            // message fields still have the HasFoo method generated
-            Assert.IsFalse(TestAllTypes.CreateBuilder().Build().HasOptionalNestedMessage);
-            Assert.IsFalse(TestAllTypes.CreateBuilder().HasOptionalNestedMessage);
-
-            // oneof fields don't have the HasFoo method (even for message types)
-            CheckHasMethodRemoved(proto2Type, proto3Type, "OneofUint32");
-            CheckHasMethodRemoved(proto2Type, proto3Type, "OneofString");
-            CheckHasMethodRemoved(proto2Type, proto3Type, "OneofNestedMessage");
-
-            CheckHasMethodRemoved(proto2BuilderType, proto3BuilderType, "OneofUint32");
-            CheckHasMethodRemoved(proto2BuilderType, proto3BuilderType, "OneofString");
-            CheckHasMethodRemoved(proto2BuilderType, proto3BuilderType, "OneofNestedMessage");
-        }
-
-        [Test]
-        public void TestFieldPresence()
-        {
-            // Optional non-message fields set to their default value are treated the same
-            // way as not set.
-
-            // Serialization will ignore such fields.
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            builder.SetOptionalInt32(0);
-            builder.SetOptionalString("");
-            builder.SetOptionalBytes(ByteString.Empty);
-            builder.SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.FOO);
-            TestAllTypes message = builder.Build();
-            Assert.AreEqual(0, message.SerializedSize);
-
-            // Test merge
-            TestAllTypes.Builder a = TestAllTypes.CreateBuilder();
-            a.SetOptionalInt32(1);
-            a.SetOptionalString("x");
-            a.SetOptionalBytes(ByteString.CopyFromUtf8("y"));
-            a.SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.BAR);
-            a.MergeFrom(message);
-            TestAllTypes messageA = a.Build();
-            Assert.AreEqual(1, messageA.OptionalInt32);
-            Assert.AreEqual("x", messageA.OptionalString);
-            Assert.AreEqual(ByteString.CopyFromUtf8("y"), messageA.OptionalBytes);
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, messageA.OptionalNestedEnum);
-
-            // equals/hashCode should produce the same results
-            TestAllTypes empty = TestAllTypes.CreateBuilder().Build();
-            Assert.IsTrue(empty.Equals(message));
-            Assert.IsTrue(message.Equals(empty));
-            Assert.AreEqual(empty.GetHashCode(), message.GetHashCode());
-        }
-
-        [Test]
-        public void TestFieldPresenceReflection()
-        {
-            MessageDescriptor descriptor = TestAllTypes.Descriptor;
-            FieldDescriptor optionalInt32Field = descriptor.FindFieldByName("optional_int32");
-            FieldDescriptor optionalStringField = descriptor.FindFieldByName("optional_string");
-            FieldDescriptor optionalBytesField = descriptor.FindFieldByName("optional_bytes");
-            FieldDescriptor optionalNestedEnumField = descriptor.FindFieldByName("optional_nested_enum");
-            FieldDescriptor oneofUint32Field = descriptor.FindFieldByName("oneof_uint32");
-
-            TestAllTypes message = TestAllTypes.CreateBuilder().Build();
-            Assert.IsFalse(message.HasField(optionalInt32Field));
-            Assert.IsFalse(message.HasField(optionalStringField));
-            Assert.IsFalse(message.HasField(optionalBytesField));
-            Assert.IsFalse(message.HasField(optionalNestedEnumField));
-
-            // Set to default value is seen as not present for optional fields.
-            // Set to default value is seen as present for oneof fields.
-            message = TestAllTypes.CreateBuilder()
-                .SetOptionalInt32(0)
-                .SetOptionalString("")
-                .SetOptionalBytes(ByteString.Empty)
-                .SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.FOO)
-                .SetOneofUint32(0U)
-                .Build();
-            Assert.IsFalse(message.HasField(optionalInt32Field));
-            Assert.IsFalse(message.HasField(optionalStringField));
-            Assert.IsFalse(message.HasField(optionalBytesField));
-            Assert.IsFalse(message.HasField(optionalNestedEnumField));
-            Assert.IsTrue(message.HasField(oneofUint32Field));
-            Assert.AreEqual(1, message.AllFields.Count);
-            
-            // Set to non-defalut value is seen as present
-            message = TestAllTypes.CreateBuilder()
-                .SetOptionalInt32(1)
-                .SetOptionalString("x")
-                .SetOptionalBytes(ByteString.CopyFromUtf8("y"))
-                .SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.BAR)
-                .Build();
-            Assert.IsTrue(message.HasField(optionalInt32Field));
-            Assert.IsTrue(message.HasField(optionalStringField));
-            Assert.IsTrue(message.HasField(optionalBytesField));
-            Assert.IsTrue(message.HasField(optionalNestedEnumField));
-            Assert.AreEqual(4, message.AllFields.Count);
-        }
-
-        [Test]
-        public void TestMessageField()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            Assert.IsFalse(builder.HasOptionalNestedMessage);
-            Assert.IsFalse(builder.Build().HasOptionalNestedMessage);
-
-            // Unlike non-message fields, if we set default value to message field, the field
-            // shoule be seem as present.
-            builder.SetOptionalNestedMessage(TestAllTypes.Types.NestedMessage.DefaultInstance);
-            Assert.IsTrue(builder.HasOptionalNestedMessage);
-            Assert.IsTrue(builder.Build().HasOptionalNestedMessage);
-        }
-
-        [Test]
-        public void TestSerializeAndParse()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            builder.SetOptionalInt32(1234);
-            builder.SetOptionalString("hello");
-            builder.SetOptionalNestedMessage(TestAllTypes.Types.NestedMessage.DefaultInstance);
-            builder.SetOneofUint32(0U);
-            ByteString data = builder.Build().ToByteString();
-
-            TestAllTypes message = TestAllTypes.ParseFrom(data);
-            Assert.AreEqual(1234, message.OptionalInt32);
-            Assert.AreEqual("hello", message.OptionalString);
-            Assert.AreEqual(ByteString.Empty, message.OptionalBytes);
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.OptionalNestedEnum);
-            Assert.IsTrue(message.HasOptionalNestedMessage);
-            Assert.AreEqual(0, message.OptionalNestedMessage.Bb);
-            Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.OneofUint32, message.OneofFieldCase);
-        }
-    }
-}

+ 0 - 102
csharp/src/ProtocolBuffers.Test/GeneratedBuilderTest.cs

@@ -1,102 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class GeneratedBuilderTest
-    {
-        class OneTimeEnumerator<T> : IEnumerable<T>
-        {
-            readonly T _item;
-            bool _enumerated;
-            public OneTimeEnumerator(T item)
-            {
-                _item = item;
-            }
-            public IEnumerator<T> GetEnumerator()
-            {
-                Assert.IsFalse(_enumerated);
-                _enumerated = true;
-                yield return _item;
-            }
-            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
-            {
-                return GetEnumerator();
-            }
-        }
-
-        [Test]
-        public void DoesNotEnumerateTwiceForMessageList()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            b.AddRangeRepeatedForeignMessage(new OneTimeEnumerator<ForeignMessage>(ForeignMessage.DefaultInstance));
-        }
-
-        [Test]
-        public void DoesNotEnumerateTwiceForPrimitiveList()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            b.AddRangeRepeatedInt32(new OneTimeEnumerator<int>(1));
-        }
-
-        [Test]
-        public void DoesNotEnumerateTwiceForStringList()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            b.AddRangeRepeatedString(new OneTimeEnumerator<string>("test"));
-        }
-
-        [Test]
-        public void DoesNotEnumerateTwiceForEnumList()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            b.AddRangeRepeatedForeignEnum(new OneTimeEnumerator<ForeignEnum>(ForeignEnum.FOREIGN_BAR));
-        }
-        
-        [Test]
-        public void DoesNotAddNullToMessageListByAddRange()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            Assert.Throws<ArgumentNullException>(() => b.AddRangeRepeatedForeignMessage(new ForeignMessage[] { null }));
-        }
-
-        [Test]
-        public void DoesNotAddNullToMessageListByAdd()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            Assert.Throws<ArgumentNullException>(() => b.AddRepeatedForeignMessage((ForeignMessage)null));
-        }
-
-        [Test]
-        public void DoesNotAddNullToMessageListBySet()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            b.AddRepeatedForeignMessage(ForeignMessage.DefaultInstance);
-            Assert.Throws<ArgumentNullException>(() => b.SetRepeatedForeignMessage(0, (ForeignMessage)null));
-        }
-
-        [Test]
-        public void DoesNotAddNullToStringListByAddRange()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            Assert.Throws<ArgumentNullException>(() => b.AddRangeRepeatedString(new String[] { null }));
-        }
-
-        [Test]
-        public void DoesNotAddNullToStringListByAdd()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            Assert.Throws<ArgumentNullException>(() => b.AddRepeatedString(null));
-        }
-
-        [Test]
-        public void DoesNotAddNullToStringListBySet()
-        {
-            TestAllTypes.Builder b = new TestAllTypes.Builder();
-            b.AddRepeatedString("one");
-            Assert.Throws<ArgumentNullException>(() => b.SetRepeatedString(0, null));
-        }
-    }
-}

+ 144 - 767
csharp/src/ProtocolBuffers.Test/GeneratedMessageTest.cs

@@ -1,776 +1,153 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
+using System;
 using System.Collections.Generic;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.Collections;
-using Google.ProtocolBuffers.TestProtos;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Google.Protobuf.TestProtos;
 using NUnit.Framework;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
+    /// <summary>
+    /// Tests around the generated TestAllTypes message.
+    /// </summary>
     public class GeneratedMessageTest
     {
-        private readonly ReflectionTester reflectionTester;
-        private readonly ReflectionTester extensionsReflectionTester;
-
-        public GeneratedMessageTest()
-        {
-            reflectionTester = ReflectionTester.CreateTestAllTypesInstance();
-            extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance();
-        }
-
-        [Test]
-        public void RepeatedAddPrimitiveBeforeBuild()
-        {
-            TestAllTypes message = new TestAllTypes.Builder {RepeatedInt32List = {1, 2, 3}}.Build();
-            TestUtil.AssertEqual(new int[] {1, 2, 3}, message.RepeatedInt32List);
-        }
-
-        [Test]
-        public void AddPrimitiveFailsAfterBuild()
-        {
-            TestAllTypes.Builder builder = new TestAllTypes.Builder();
-            IList<int> list = builder.RepeatedInt32List;
-            list.Add(1); // Fine
-            builder.Build();
-
-            Assert.Throws<NotSupportedException>(() => list.Add(2));
-        }
-
-        [Test]
-        public void RepeatedAddMessageBeforeBuild()
-        {
-            TestAllTypes message = new TestAllTypes.Builder
-                                       {
-                                           RepeatedNestedMessageList =
-                                               {new TestAllTypes.Types.NestedMessage.Builder {Bb = 10}.Build()}
-                                       }.Build();
-            Assert.AreEqual(1, message.RepeatedNestedMessageCount);
-            Assert.AreEqual(10, message.RepeatedNestedMessageList[0].Bb);
-        }
-
-        [Test]
-        public void AddMessageFailsAfterBuild()
-        {
-            TestAllTypes.Builder builder = new TestAllTypes.Builder();
-            IList<TestAllTypes.Types.NestedMessage> list = builder.RepeatedNestedMessageList;
-            builder.Build();
-
-            Assert.Throws<NotSupportedException>(() => list.Add(new TestAllTypes.Types.NestedMessage.Builder { Bb = 10 }.Build()));
-        }
-
-        [Test]
-        public void DefaultInstance()
-        {
-            Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.DefaultInstance.DefaultInstanceForType);
-            Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.CreateBuilder().DefaultInstanceForType);
-        }
-
-        [Test]
-        public void Accessors()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TestUtil.SetAllFields(builder);
-            TestAllTypes message = builder.Build();
-            TestUtil.AssertAllFieldsSet(message);
-        }
-
-        [Test]
-        public void SettersRejectNull()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            Assert.Throws<ArgumentNullException>(() => builder.SetOptionalString(null));
-            Assert.Throws<ArgumentNullException>(() => builder.SetOptionalBytes(null));
-            Assert.Throws<ArgumentNullException>(
-                () => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage) null));
-            Assert.Throws<ArgumentNullException>(
-                () => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage.Builder) null));
-            Assert.Throws<ArgumentNullException>(() => builder.AddRepeatedString(null));
-            Assert.Throws<ArgumentNullException>(() => builder.AddRepeatedBytes(null));
-            Assert.Throws<ArgumentNullException>(
-                () => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage) null));
-            Assert.Throws<ArgumentNullException>(
-                () => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage.Builder) null));
-        }
-
-        [Test]
-        public void RepeatedSetters()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TestUtil.SetAllFields(builder);
-            TestUtil.ModifyRepeatedFields(builder);
-            TestAllTypes message = builder.Build();
-            TestUtil.AssertRepeatedFieldsModified(message);
-        }
-
-        [Test]
-        public void RepeatedAppend()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-
-            builder.AddRangeRepeatedInt32(new int[] {1, 2, 3, 4});
-            builder.AddRangeRepeatedForeignEnum((new ForeignEnum[] {ForeignEnum.FOREIGN_BAZ}));
-
-            ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build();
-            builder.AddRangeRepeatedForeignMessage(new ForeignMessage[] {foreignMessage});
-
-            TestAllTypes message = builder.Build();
-            TestUtil.AssertEqual(message.RepeatedInt32List, new int[] {1, 2, 3, 4});
-            TestUtil.AssertEqual(message.RepeatedForeignEnumList, new ForeignEnum[] {ForeignEnum.FOREIGN_BAZ});
-            Assert.AreEqual(1, message.RepeatedForeignMessageCount);
-            Assert.AreEqual(12, message.GetRepeatedForeignMessage(0).C);
-        }
-
-        [Test]
-        public void RepeatedAppendRejectsNull()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-
-            ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build();
-            Assert.Throws<ArgumentNullException>(
-                () => builder.AddRangeRepeatedForeignMessage(new[] {foreignMessage, null}));
-            Assert.Throws<ArgumentNullException>(() => builder.AddRangeRepeatedForeignMessage(null));
-            Assert.Throws<ArgumentNullException>(() => builder.AddRangeRepeatedForeignEnum(null));
-            Assert.Throws<ArgumentNullException>(() => builder.AddRangeRepeatedString(new[] {"one", null}));
-            Assert.Throws<ArgumentNullException>(
-                () => builder.AddRangeRepeatedBytes(new[] {TestUtil.ToBytes("one"), null}));
-        }
-
-        [Test]
-        public void SettingForeignMessageUsingBuilder()
-        {
-            TestAllTypes message = TestAllTypes.CreateBuilder()
-                // Pass builder for foreign message instance.
-                .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123))
-                .Build();
-            TestAllTypes expectedMessage = TestAllTypes.CreateBuilder()
-                // Create expected version passing foreign message instance explicitly.
-                .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123).Build())
-                .Build();
-            Assert.AreEqual(expectedMessage, message);
-        }
-
-        [Test]
-        public void SettingRepeatedForeignMessageUsingBuilder()
-        {
-            TestAllTypes message = TestAllTypes.CreateBuilder()
-                // Pass builder for foreign message instance.
-                .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456))
-                .Build();
-            TestAllTypes expectedMessage = TestAllTypes.CreateBuilder()
-                // Create expected version passing foreign message instance explicitly.
-                .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456).Build())
-                .Build();
-            Assert.AreEqual(expectedMessage, message);
-        }
-
-        [Test]
-        public void SettingRepeatedValuesUsingRangeInCollectionInitializer()
-        {
-            int[] values = {1, 2, 3};
-            TestAllTypes message = new TestAllTypes.Builder
-                                       {
-                                           RepeatedSint32List = {values}
-                                       }.Build();
-            Assert.IsTrue(Lists.Equals(values, message.RepeatedSint32List));
-        }
-
-        [Test]
-        public void SettingRepeatedValuesUsingIndividualValuesInCollectionInitializer()
-        {
-            TestAllTypes message = new TestAllTypes.Builder
-                                       {
-                                           RepeatedSint32List = {6, 7}
-                                       }.Build();
-            Assert.IsTrue(Lists.Equals(new int[] {6, 7}, message.RepeatedSint32List));
-        }
-
-        [Test]
-        public void Defaults()
-        {
-            TestUtil.AssertClear(TestAllTypes.DefaultInstance);
-            TestUtil.AssertClear(TestAllTypes.CreateBuilder().Build());
-
-            Assert.AreEqual("\u1234", TestExtremeDefaultValues.DefaultInstance.Utf8String);
-        }
-
-        [Test]
-        public void ReflectionGetters()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TestUtil.SetAllFields(builder);
-            TestAllTypes message = builder.Build();
-            reflectionTester.AssertAllFieldsSetViaReflection(message);
-        }
-
-        [Test]
-        public void ReflectionSetters()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            TestAllTypes message = builder.Build();
-            TestUtil.AssertAllFieldsSet(message);
-        }
-
-        [Test]
-        public void ReflectionClear()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            reflectionTester.ClearAllFieldsViaReflection(builder);
-            TestAllTypes message = builder.Build();
-            TestUtil.AssertClear(message);
-        }
-
-        [Test]
-        public void ReflectionSettersRejectNull()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            reflectionTester.AssertReflectionSettersRejectNull(builder);
-        }
-
-        [Test]
-        public void ReflectionRepeatedSetters()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            reflectionTester.ModifyRepeatedFieldsViaReflection(builder);
-            TestAllTypes message = builder.Build();
-            TestUtil.AssertRepeatedFieldsModified(message);
-        }
-
-        [Test]
-        public void TestReflectionRepeatedSettersRejectNull()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            reflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);
-        }
-
-        [Test]
-        public void ReflectionDefaults()
-        {
-            TestUtil.TestInMultipleCultures(() =>
-                                                {
-                                                    reflectionTester.AssertClearViaReflection(
-                                                        TestAllTypes.DefaultInstance);
-                                                    reflectionTester.AssertClearViaReflection(
-                                                        TestAllTypes.CreateBuilder().Build());
-                                                });
-        }
-
-        [Test]
-        public void ReflectionGetOneof()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            Descriptors.OneofDescriptor oneof = TestAllTypes.Descriptor.Oneofs[0];
-            Descriptors.FieldDescriptor field = TestAllTypes.Descriptor.FindFieldByName("oneof_bytes");
-            Assert.AreSame(field, builder.OneofFieldDescriptor(oneof));
-        }
-
-        [Test]
-        public void ReflectionClearOneof()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            reflectionTester.SetAllFieldsViaReflection(builder);
-            OneofDescriptor oneof = TestAllTypes.Descriptor.Oneofs[0];
-            FieldDescriptor field = TestAllTypes.Descriptor.FindFieldByName("oneof_bytes");
-
-            Assert.IsTrue(builder.HasOneof(oneof));
-            Assert.IsTrue(builder.HasField(field));
-            builder.ClearOneof(oneof);
-            Assert.IsFalse(builder.HasOneof(oneof));
-            Assert.IsFalse(builder.HasField(field));
-        }
-
-        // =================================================================
-        // Extensions.
-
-        [Test]
-        public void ExtensionAccessors()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            TestUtil.SetAllExtensions(builder);
-            TestAllExtensions message = builder.Build();
-            TestUtil.AssertAllExtensionsSet(message);
-        }
-
-        [Test]
-        public void ExtensionRepeatedSetters()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            TestUtil.SetAllExtensions(builder);
-            TestUtil.ModifyRepeatedExtensions(builder);
-            TestAllExtensions message = builder.Build();
-            TestUtil.AssertRepeatedExtensionsModified(message);
-        }
-
-        [Test]
-        public void ExtensionDefaults()
-        {
-            TestUtil.AssertExtensionsClear(TestAllExtensions.DefaultInstance);
-            TestUtil.AssertExtensionsClear(TestAllExtensions.CreateBuilder().Build());
-        }
-
-        [Test]
-        public void ExtensionReflectionGetters()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            TestUtil.SetAllExtensions(builder);
-            TestAllExtensions message = builder.Build();
-            extensionsReflectionTester.AssertAllFieldsSetViaReflection(message);
-        }
-
-        [Test]
-        public void ExtensionReflectionSetters()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            extensionsReflectionTester.SetAllFieldsViaReflection(builder);
-            TestAllExtensions message = builder.Build();
-            TestUtil.AssertAllExtensionsSet(message);
-        }
-
         [Test]
-        public void ExtensionReflectionSettersRejectNull()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            extensionsReflectionTester.AssertReflectionSettersRejectNull(builder);
-        }
-
-        [Test]
-        public void ExtensionReflectionRepeatedSetters()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            extensionsReflectionTester.SetAllFieldsViaReflection(builder);
-            extensionsReflectionTester.ModifyRepeatedFieldsViaReflection(builder);
-            TestAllExtensions message = builder.Build();
-            TestUtil.AssertRepeatedExtensionsModified(message);
-        }
-
-        [Test]
-        public void ExtensionReflectionRepeatedSettersRejectNull()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            extensionsReflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);
-        }
-
-        [Test]
-        public void ExtensionReflectionDefaults()
-        {
-            TestUtil.TestInMultipleCultures(() =>
-                                                {
-                                                    extensionsReflectionTester.AssertClearViaReflection(
-                                                        TestAllExtensions.DefaultInstance);
-                                                    extensionsReflectionTester.AssertClearViaReflection(
-                                                        TestAllExtensions.CreateBuilder().Build());
-                                                });
-        }
-
-        [Test]
-        public void ClearExtension()
-        {
-            // ClearExtension() is not actually used in TestUtil, so try it manually.
-            Assert.IsFalse(TestAllExtensions.CreateBuilder()
-                               .SetExtension(Unittest.OptionalInt32Extension, 1)
-                               .ClearExtension(Unittest.OptionalInt32Extension)
-                               .HasExtension(Unittest.OptionalInt32Extension));
-            Assert.AreEqual(0, TestAllExtensions.CreateBuilder()
-                                   .AddExtension(Unittest.RepeatedInt32Extension, 1)
-                                   .ClearExtension(Unittest.RepeatedInt32Extension)
-                                   .GetExtensionCount(Unittest.RepeatedInt32Extension));
-        }
-
-        [Test]
-        public void ExtensionMergeFrom()
-        {
-            TestAllExtensions original = TestAllExtensions.CreateBuilder()
-                .SetExtension(Unittest.OptionalInt32Extension, 1).Build();
-            TestAllExtensions merged =
-                TestAllExtensions.CreateBuilder().MergeFrom(original).Build();
-            Assert.IsTrue((merged.HasExtension(Unittest.OptionalInt32Extension)));
-            Assert.AreEqual(1, (int) merged.GetExtension(Unittest.OptionalInt32Extension));
-        }
-
-        /* Removed multiple files option for the moment
-    [Test]
-    public void MultipleFilesOption() {
-      // We mostly just want to check that things compile.
-      MessageWithNoOuter message = MessageWithNoOuter.CreateBuilder()
-          .SetNested(MessageWithNoOuter.Types.NestedMessage.CreateBuilder().SetI(1))
-          .AddForeign(TestAllTypes.CreateBuilder().SetOptionalInt32(1))
-          .SetNestedEnum(MessageWithNoOuter.Types.NestedEnum.BAZ)
-          .SetForeignEnum(EnumWithNoOuter.BAR)
-          .Build();
-      Assert.AreEqual(message, MessageWithNoOuter.ParseFrom(message.ToByteString()));
-
-      Assert.AreEqual(MultiFileProto.DescriptorProtoFile, MessageWithNoOuter.DescriptorProtoFile.File);
-
-      FieldDescriptor field = MessageWithNoOuter.DescriptorProtoFile.FindDescriptor<FieldDescriptor>("foreign_enum");
-      Assert.AreEqual(MultiFileProto.DescriptorProtoFile.FindTypeByName<EnumDescriptor>("EnumWithNoOuter")
-        .FindValueByNumber((int)EnumWithNoOuter.BAR), message[field]);
-
-      Assert.AreEqual(MultiFileProto.DescriptorProtoFile, ServiceWithNoOuter.DescriptorProtoFile.File);
-
-      Assert.IsFalse(TestAllExtensions.DefaultInstance.HasExtension(MultiFileProto.ExtensionWithOuter));
-    }*/
-
-        [Test]
-        public void OptionalFieldWithRequiredSubfieldsOptimizedForSize()
-        {
-            TestOptionalOptimizedForSize message = TestOptionalOptimizedForSize.DefaultInstance;
-            Assert.IsTrue(message.IsInitialized);
-
-            message = TestOptionalOptimizedForSize.CreateBuilder().SetO(
-                TestRequiredOptimizedForSize.CreateBuilder().BuildPartial()
-                ).BuildPartial();
-            Assert.IsFalse(message.IsInitialized);
-
-            message = TestOptionalOptimizedForSize.CreateBuilder().SetO(
-                TestRequiredOptimizedForSize.CreateBuilder().SetX(5).BuildPartial()
-                ).BuildPartial();
-            Assert.IsTrue(message.IsInitialized);
-        }
-
-        [Test]
-        public void OptimizedForSizeMergeUsesAllFieldsFromTarget()
-        {
-            TestOptimizedForSize withFieldSet = new TestOptimizedForSize.Builder {I = 10}.Build();
-            TestOptimizedForSize.Builder builder = new TestOptimizedForSize.Builder();
-            builder.MergeFrom(withFieldSet);
-            TestOptimizedForSize built = builder.Build();
-            Assert.AreEqual(10, built.I);
-        }
-
-        [Test]
-        public void UninitializedExtensionInOptimizedForSizeMakesMessageUninitialized()
-        {
-            TestOptimizedForSize.Builder builder = new TestOptimizedForSize.Builder();
-            builder.SetExtension(TestOptimizedForSize.TestExtension2,
-                                 new TestRequiredOptimizedForSize.Builder().BuildPartial());
-            Assert.IsFalse(builder.IsInitialized);
-            Assert.IsFalse(builder.BuildPartial().IsInitialized);
-
-            builder = new TestOptimizedForSize.Builder();
-            builder.SetExtension(TestOptimizedForSize.TestExtension2,
-                                 new TestRequiredOptimizedForSize.Builder {X = 10}.BuildPartial());
-            Assert.IsTrue(builder.IsInitialized);
-            Assert.IsTrue(builder.BuildPartial().IsInitialized);
-        }
-
-        [Test]
-        public void ToBuilder()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TestUtil.SetAllFields(builder);
-            TestAllTypes message = builder.Build();
-            TestUtil.AssertAllFieldsSet(message.ToBuilder().Build());
-        }
-
-        [Test]
-        public void FieldConstantValues()
-        {
-            Assert.AreEqual(TestAllTypes.Types.NestedMessage.BbFieldNumber, 1);
-            Assert.AreEqual(TestAllTypes.OptionalInt32FieldNumber, 1);
-            Assert.AreEqual(TestAllTypes.OptionalGroupFieldNumber, 16);
-            Assert.AreEqual(TestAllTypes.OptionalNestedMessageFieldNumber, 18);
-            Assert.AreEqual(TestAllTypes.OptionalNestedEnumFieldNumber, 21);
-            Assert.AreEqual(TestAllTypes.RepeatedInt32FieldNumber, 31);
-            Assert.AreEqual(TestAllTypes.RepeatedGroupFieldNumber, 46);
-            Assert.AreEqual(TestAllTypes.RepeatedNestedMessageFieldNumber, 48);
-            Assert.AreEqual(TestAllTypes.RepeatedNestedEnumFieldNumber, 51);
-        }
-
-        [Test]
-        public void ExtensionConstantValues()
-        {
-            Assert.AreEqual(TestRequired.SingleFieldNumber, 1000);
-            Assert.AreEqual(TestRequired.MultiFieldNumber, 1001);
-            Assert.AreEqual(Unittest.OptionalInt32ExtensionFieldNumber, 1);
-            Assert.AreEqual(Unittest.OptionalGroupExtensionFieldNumber, 16);
-            Assert.AreEqual(Unittest.OptionalNestedMessageExtensionFieldNumber, 18);
-            Assert.AreEqual(Unittest.OptionalNestedEnumExtensionFieldNumber, 21);
-            Assert.AreEqual(Unittest.RepeatedInt32ExtensionFieldNumber, 31);
-            Assert.AreEqual(Unittest.RepeatedGroupExtensionFieldNumber, 46);
-            Assert.AreEqual(Unittest.RepeatedNestedMessageExtensionFieldNumber, 48);
-            Assert.AreEqual(Unittest.RepeatedNestedEnumExtensionFieldNumber, 51);
-        }
-
-        [Test]
-        public void EmptyPackedValue()
-        {
-            TestPackedTypes empty = new TestPackedTypes.Builder().Build();
-            Assert.AreEqual(0, empty.SerializedSize);
-        }
-
-        // oneof tests
-        [Test]
-        public void TestOneofEnumCase()
-        {
-            TestOneof2 message = TestOneof2.CreateBuilder()
-                .SetFooInt(123).SetFooString("foo").SetFooCord("bar").Build();
-            TestUtil.AssertAtMostOneFieldSetOneof(message);
-        }
-
-        [Test]
-        public void TestClearOneof()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder().SetFooInt(123);
-            Assert.AreEqual(TestOneof2.FooOneofCase.FooInt, builder.FooCase);
-            builder.ClearFoo();
-            Assert.AreEqual(TestOneof2.FooOneofCase.None, builder.FooCase);
-        }
-
-        [Test]
-        public void TestSetOneofClearsOthers()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message =
-                builder.SetFooInt(123).SetFooString("foo").Build();
-            Assert.IsTrue(message.HasFooString);
-            TestUtil.AssertAtMostOneFieldSetOneof(message);
-
-            message = builder.SetFooCord("bar").Build();
-            Assert.IsTrue(message.HasFooCord);
-            TestUtil.AssertAtMostOneFieldSetOneof(message);
-
-            message = builder.SetFooStringPiece("baz").Build();
-            Assert.IsTrue(message.HasFooStringPiece);
-            TestUtil.AssertAtMostOneFieldSetOneof(message);
-
-            message = builder.SetFooBytes(TestUtil.ToBytes("qux")).Build();
-            Assert.IsTrue(message.HasFooBytes);
-            TestUtil.AssertAtMostOneFieldSetOneof(message);
-
-            message = builder.SetFooEnum(TestOneof2.Types.NestedEnum.FOO).Build();
-            Assert.IsTrue(message.HasFooEnum);
-            TestUtil.AssertAtMostOneFieldSetOneof(message);
-
-            message = builder.SetFooMessage(
-                TestOneof2.Types.NestedMessage.CreateBuilder().SetQuxInt(234).Build()).Build();
-            Assert.IsTrue(message.HasFooMessage);
-            TestUtil.AssertAtMostOneFieldSetOneof(message);
-
-            message = builder.SetFooInt(123).Build();
-            Assert.IsTrue(message.HasFooInt);
-            TestUtil.AssertAtMostOneFieldSetOneof(message);
-        }
-
-        [Test]
-        public void TestOneofTypes_Primitive()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            Assert.AreEqual(builder.FooInt, 0);
-            Assert.IsFalse(builder.HasFooInt);
-            Assert.IsTrue(builder.SetFooInt(123).HasFooInt);
-            Assert.AreEqual(builder.FooInt, 123);
-            TestOneof2 message = builder.BuildPartial();
-            Assert.IsTrue(message.HasFooInt);
-            Assert.AreEqual(message.FooInt, 123);
-
-            Assert.IsFalse(builder.ClearFooInt().HasFooInt);
-            TestOneof2 message2 = builder.Build();
-            Assert.IsFalse(message2.HasFooInt);
-            Assert.AreEqual(message2.FooInt, 0);
-        }
-
-        [Test]
-        public void TestOneofTypes_Enum()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            Assert.AreEqual(builder.FooEnum, TestOneof2.Types.NestedEnum.FOO);
-            Assert.IsTrue(builder.SetFooEnum(TestOneof2.Types.NestedEnum.BAR).HasFooEnum);
-            Assert.AreEqual(builder.FooEnum, TestOneof2.Types.NestedEnum.BAR);
-            TestOneof2 message = builder.BuildPartial();
-            Assert.IsTrue(message.HasFooEnum);
-            Assert.AreEqual(message.FooEnum, TestOneof2.Types.NestedEnum.BAR);
-
-            Assert.IsFalse(builder.ClearFooEnum().HasFooEnum);
-            TestOneof2 message2 = builder.Build();
-            Assert.IsFalse(message2.HasFooEnum);
-            Assert.AreEqual(message2.FooEnum, TestOneof2.Types.NestedEnum.FOO);
-        }
-
-        [Test]
-        public void TestOneofTypes_String()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            Assert.AreEqual(builder.FooString, "");
-            Assert.IsTrue(builder.SetFooString("foo").HasFooString);
-            Assert.AreEqual(builder.FooString, "foo");
-            TestOneof2 message = builder.BuildPartial();
-            Assert.IsTrue(message.HasFooString);
-            Assert.AreEqual(message.FooString, "foo");
-
-            Assert.IsFalse(builder.ClearFooString().HasFooString);
-            TestOneof2 message2 = builder.Build();
-            Assert.IsFalse(message2.HasFooString);
-            Assert.AreEqual(message2.FooString, "");
-
-            builder.SetFooInt(123);
-            Assert.AreEqual(builder.FooString, "");
-            Assert.AreEqual(builder.FooInt, 123);
-            message = builder.Build();
-            Assert.AreEqual(message.FooString, "");
-            Assert.AreEqual(message.FooInt, 123);
-        }
-
-        [Test]
-        public void TestOneofTypes_Message()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            Assert.AreEqual(builder.FooMessage.QuxInt, 0);
-            builder.SetFooMessage(TestOneof2.Types.NestedMessage.CreateBuilder().SetQuxInt(234).Build());
-            Assert.IsTrue(builder.HasFooMessage);
-            Assert.AreEqual(builder.FooMessage.QuxInt, 234);
-            TestOneof2 message = builder.BuildPartial();
-            Assert.IsTrue(message.HasFooMessage);
-            Assert.AreEqual(message.FooMessage.QuxInt, 234);
-
-            Assert.IsFalse(builder.ClearFooMessage().HasFooMessage);
-            message = builder.Build();
-            Assert.IsFalse(message.HasFooMessage);
-            Assert.AreEqual(message.FooMessage.QuxInt, 0);
-
-            builder = TestOneof2.CreateBuilder();
-            Assert.IsFalse(builder.HasFooMessage);
-            builder.SetFooMessage(TestOneof2.Types.NestedMessage.CreateBuilder().SetQuxInt(123));
-            Assert.IsTrue(builder.HasFooMessage);
-            Assert.AreEqual(builder.FooMessage.QuxInt, 123);
-            message = builder.Build();
-            Assert.IsTrue(message.HasFooMessage);
-            Assert.AreEqual(message.FooMessage.QuxInt, 123);
-        }
-
-        [Test]
-        public void TestOneofMerge_Primitive()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooInt(123).Build();
-            TestOneof2 message2 = TestOneof2.CreateBuilder().MergeFrom(message).Build();
-            Assert.IsTrue(message2.HasFooInt);
-            Assert.AreEqual(message2.FooInt, 123);
-        }
-
-        [Test]
-        public void TestOneofMerge_String()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooString("foo").Build();
-            TestOneof2 message2 = TestOneof2.CreateBuilder().MergeFrom(message).Build();
-            Assert.IsTrue(message2.HasFooString);
-            Assert.AreEqual(message2.FooString, "foo");
-        }
-
-        [Test]
-        public void TestOneofMerge_Enum()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooEnum(TestOneof2.Types.NestedEnum.BAR).Build();
-            TestOneof2 message2 = TestOneof2.CreateBuilder().MergeFrom(message).Build();
-            Assert.IsTrue(message2.HasFooEnum);
-            Assert.AreEqual(message2.FooEnum, TestOneof2.Types.NestedEnum.BAR);
-        }
-
-        public void TestOneofMerge_message()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooMessage(
-                TestOneof2.Types.NestedMessage.CreateBuilder().SetQuxInt(234).Build()).Build();
-            TestOneof2 message2 = TestOneof2.CreateBuilder().MergeFrom(message).Build();
-            Assert.IsTrue(message2.HasFooMessage);
-            Assert.AreEqual(message2.FooMessage.QuxInt, 234);
-        }
-
-        [Test]
-        public void TestOneofMergeMixed()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooEnum(TestOneof2.Types.NestedEnum.BAR).Build();
-            TestOneof2 message2 =
-                TestOneof2.CreateBuilder().SetFooString("foo").MergeFrom(message).Build();
-            Assert.IsFalse(message2.HasFooString);
-            Assert.IsTrue(message2.HasFooEnum);
-            Assert.AreEqual(message2.FooEnum, TestOneof2.Types.NestedEnum.BAR);
-        }
-
-        [Test]
-        public void TestOneofSerialization_Primitive()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooInt(123).Build();
-            ByteString serialized = message.ToByteString();
-            TestOneof2 message2 = TestOneof2.ParseFrom(serialized);
-            Assert.IsTrue(message2.HasFooInt);
-            Assert.AreEqual(message2.FooInt, 123);
-        }
-
-        [Test]
-        public void TestOneofSerialization_String()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooString("foo").Build();
-            ByteString serialized = message.ToByteString();
-            TestOneof2 message2 = TestOneof2.ParseFrom(serialized);
-            Assert.IsTrue(message2.HasFooString);
-            Assert.AreEqual(message2.FooString, "foo");
-        }
-
-        [Test]
-        public void TestOneofSerialization_Enum()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooEnum(TestOneof2.Types.NestedEnum.BAR).Build();
-            ByteString serialized = message.ToByteString();
-            TestOneof2 message2 = TestOneof2.ParseFrom(serialized);
-            Assert.IsTrue(message2.HasFooEnum);
-            Assert.AreEqual(message2.FooEnum, TestOneof2.Types.NestedEnum.BAR);
-        }
-
-        [Test]
-        public void TestOneofSerialization_Message()
-        {
-            TestOneof2.Builder builder = TestOneof2.CreateBuilder();
-            TestOneof2 message = builder.SetFooMessage(
-                TestOneof2.Types.NestedMessage.CreateBuilder().SetQuxInt(234).Build()).Build();
-            ByteString serialized = message.ToByteString();
-            TestOneof2 message2 = TestOneof2.ParseFrom(serialized);
-            Assert.IsTrue(message2.HasFooMessage);
-            Assert.AreEqual(message2.FooMessage.QuxInt, 234);
+        public void DefaultValues()
+        {
+            // Single fields
+            var message = new TestAllTypes();
+            Assert.AreEqual(false, message.SingleBool);
+            Assert.AreEqual(ByteString.Empty, message.SingleBytes);
+            Assert.AreEqual(0.0, message.SingleDouble);
+            Assert.AreEqual(0, message.SingleFixed32);
+            Assert.AreEqual(0L, message.SingleFixed64);
+            Assert.AreEqual(0.0f, message.SingleFloat);
+            Assert.AreEqual(ForeignEnum.FOREIGN_UNSPECIFIED, message.SingleForeignEnum);
+            Assert.IsNull(message.SingleForeignMessage);
+            Assert.AreEqual(ImportEnum.IMPORT_ENUM_UNSPECIFIED, message.SingleImportEnum);
+            Assert.IsNull(message.SingleImportMessage);
+            Assert.AreEqual(0, message.SingleInt32);
+            Assert.AreEqual(0L, message.SingleInt64);
+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED, message.SingleNestedEnum);
+            Assert.IsNull(message.SingleNestedMessage);
+            Assert.IsNull(message.SinglePublicImportMessage);
+            Assert.AreEqual(0, message.SingleSfixed32);
+            Assert.AreEqual(0L, message.SingleSfixed64);
+            Assert.AreEqual(0, message.SingleSint32);
+            Assert.AreEqual(0L, message.SingleSint64);
+            Assert.AreEqual("", message.SingleString);
+            Assert.AreEqual(0U, message.SingleUint32);
+            Assert.AreEqual(0UL, message.SingleUint64);
+
+            // Repeated fields
+            Assert.AreEqual(0, message.RepeatedBool.Count);
+            Assert.AreEqual(0, message.RepeatedBytes.Count);
+            Assert.AreEqual(0, message.RepeatedDouble.Count);
+            Assert.AreEqual(0, message.RepeatedFixed32.Count);
+            Assert.AreEqual(0, message.RepeatedFixed64.Count);
+            Assert.AreEqual(0, message.RepeatedFloat.Count);
+            Assert.AreEqual(0, message.RepeatedForeignEnum.Count);
+            Assert.AreEqual(0, message.RepeatedForeignMessage.Count);
+            Assert.AreEqual(0, message.RepeatedImportEnum.Count);
+            Assert.AreEqual(0, message.RepeatedImportMessage.Count);
+            Assert.AreEqual(0, message.RepeatedNestedEnum.Count);
+            Assert.AreEqual(0, message.RepeatedNestedMessage.Count);
+            Assert.AreEqual(0, message.RepeatedPublicImportMessage.Count);
+            Assert.AreEqual(0, message.RepeatedSfixed32.Count);
+            Assert.AreEqual(0, message.RepeatedSfixed64.Count);
+            Assert.AreEqual(0, message.RepeatedSint32.Count);
+            Assert.AreEqual(0, message.RepeatedSint64.Count);
+            Assert.AreEqual(0, message.RepeatedString.Count);
+            Assert.AreEqual(0, message.RepeatedUint32.Count);
+            Assert.AreEqual(0, message.RepeatedUint64.Count);
+
+            // Oneof fields
+            Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase);
+            Assert.AreEqual(0, message.OneofUint32);
+            Assert.AreEqual("", message.OneofString);
+            Assert.AreEqual(ByteString.Empty, message.OneofBytes);
+            Assert.IsNull(message.OneofNestedMessage);
+        }
+
+        [Test]
+        public void RoundTrip_Empty()
+        {
+            var message = new TestAllTypes();
+            // Without setting any values, there's nothing to write.
+            byte[] bytes = message.ToByteArray();
+            Assert.AreEqual(0, bytes.Length);
+            TestAllTypes parsed = TestAllTypes.Parser.ParseFrom(bytes);
+            Assert.AreEqual(message, parsed);
+        }
+
+        [Test]
+        public void RoundTrip_SingleValues()
+        {
+            var message = new TestAllTypes
+            {
+                SingleBool = true,
+                SingleBytes = ByteString.CopyFrom(new byte[] { 1, 2, 3, 4 }),
+                SingleDouble = 23.5,
+                SingleFixed32 = 23,
+                SingleFixed64 = 1234567890123,
+                SingleFloat = 12.25f,
+                SingleForeignEnum = ForeignEnum.FOREIGN_BAR,
+                SingleForeignMessage = new ForeignMessage { C = 10 },
+                SingleImportEnum = ImportEnum.IMPORT_BAZ,
+                SingleImportMessage = new ImportMessage { D = 20 },
+                SingleInt32 = 100,
+                SingleInt64 = 3210987654321,
+                SingleNestedEnum = TestAllTypes.Types.NestedEnum.FOO,
+                SingleNestedMessage = new TestAllTypes.Types.NestedMessage { Bb = 35 },
+                SinglePublicImportMessage = new PublicImportMessage { E = 54 },
+                SingleSfixed32 = -123,
+                SingleSfixed64 = -12345678901234,
+                SingleSint32 = -456,
+                SingleSint64 = -12345678901235,
+                SingleString = "test",
+                SingleUint32 = uint.MaxValue,
+                SingleUint64 = ulong.MaxValue
+            };
+
+            byte[] bytes = message.ToByteArray();
+            TestAllTypes parsed = TestAllTypes.Parser.ParseFrom(bytes);
+            Assert.AreEqual(message, parsed);
+        }
+
+        [Test]
+        public void RoundTrip_RepeatedValues()
+        {
+            var message = new TestAllTypes
+            {
+                RepeatedBool = { true, false },
+                RepeatedBytes = { ByteString.CopyFrom(new byte[] { 1, 2, 3, 4 }), ByteString.CopyFrom(new byte[] { 5, 6 }) },
+                RepeatedDouble = { -12.25, 23.5 },
+                RepeatedFixed32 = { uint.MaxValue, 23 },
+                RepeatedFixed64 = { ulong.MaxValue, 1234567890123 },
+                RepeatedFloat = { 100f, 12.25f },
+                RepeatedForeignEnum = { ForeignEnum.FOREIGN_FOO, ForeignEnum.FOREIGN_BAR },
+                RepeatedForeignMessage = { new ForeignMessage(), new ForeignMessage { C = 10 } },
+                RepeatedImportEnum = { ImportEnum.IMPORT_BAZ, ImportEnum.IMPORT_ENUM_UNSPECIFIED },
+                RepeatedImportMessage = { new ImportMessage { D = 20 }, new ImportMessage { D = 25 } },
+                RepeatedInt32 = { 100, 200 },
+                RepeatedInt64 = { 3210987654321, long.MaxValue },
+                RepeatedNestedEnum = { TestAllTypes.Types.NestedEnum.FOO, TestAllTypes.Types.NestedEnum.NEG },
+                RepeatedNestedMessage = { new TestAllTypes.Types.NestedMessage { Bb = 35 }, new TestAllTypes.Types.NestedMessage { Bb = 10 } },
+                RepeatedPublicImportMessage = { new PublicImportMessage { E = 54 }, new PublicImportMessage { E = -1 } },
+                RepeatedSfixed32 = { -123, 123 },
+                RepeatedSfixed64 = { -12345678901234, 12345678901234 },
+                RepeatedSint32 = { -456, 100 },
+                RepeatedSint64 = { -12345678901235, 123 },
+                RepeatedString = { "foo", "bar" },
+                RepeatedUint32 = { uint.MaxValue, uint.MinValue },
+                RepeatedUint64 = { ulong.MaxValue, uint.MinValue }
+            };
+
+            byte[] bytes = message.ToByteArray();
+            TestAllTypes parsed = TestAllTypes.Parser.ParseFrom(bytes);
+            Assert.AreEqual(message, parsed);
         }
     }
-}
+}

+ 5 - 5
csharp/src/ProtocolBuffers.Test/IssuesTest.cs

@@ -34,13 +34,12 @@
 
 #endregion
 
-
-using Google.ProtocolBuffers.Descriptors;
+using Google.Protobuf.Descriptors;
 using UnitTest.Issues.TestProtos;
 using NUnit.Framework;
 
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     /// <summary>
     /// Tests for issues which aren't easily compartmentalized into other unit tests.
@@ -51,10 +50,11 @@ namespace Google.ProtocolBuffers
         [Test]
         public void FieldCalledItem()
         {
-            ItemField message = new ItemField.Builder { Item = 3 }.Build();
+            ItemField message = new ItemField { Item = 3 };
             FieldDescriptor field = ItemField.Descriptor.FindFieldByName("item");
             Assert.NotNull(field);
-            Assert.AreEqual(3, (int)message[field]);
+            // TODO(jonskeet): Reflection...
+            // Assert.AreEqual(3, (int)message[field]);
         }
     }
 }

+ 0 - 90
csharp/src/ProtocolBuffers.Test/MessageStreamIteratorTest.cs

@@ -1,90 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System.Collections.Generic;
-using System.IO;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-using NestedMessage = Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage;
-
-namespace Google.ProtocolBuffers
-{
-    public class MessageStreamIteratorTest
-    {
-        [Test]
-        public void ThreeMessagesInMemory()
-        {
-            MemoryStream stream = new MemoryStream(MessageStreamWriterTest.ThreeMessageData);
-            IEnumerable<NestedMessage> iterator = MessageStreamIterator<NestedMessage>.FromStreamProvider(() => stream);
-            List<NestedMessage> messages = new List<NestedMessage>(iterator);
-
-            Assert.AreEqual(3, messages.Count);
-            Assert.AreEqual(5, messages[0].Bb);
-            Assert.AreEqual(1500, messages[1].Bb);
-            Assert.IsFalse(messages[2].HasBb);
-        }
-
-        [Test]
-        public void ManyMessagesShouldNotTriggerSizeAlert()
-        {
-            int messageSize = TestUtil.GetAllSet().SerializedSize;
-            // Enough messages to trigger the alert unless we've reset the size
-            // Note that currently we need to make this big enough to copy two whole buffers,
-            // as otherwise when we refill the buffer the second type, the alert triggers instantly.
-            int correctCount = (CodedInputStream.BufferSize*2)/messageSize + 1;
-            using (MemoryStream stream = new MemoryStream())
-            {
-                MessageStreamWriter<TestAllTypes> writer = new MessageStreamWriter<TestAllTypes>(stream);
-                for (int i = 0; i < correctCount; i++)
-                {
-                    writer.Write(TestUtil.GetAllSet());
-                }
-                writer.Flush();
-
-                stream.Position = 0;
-
-                int count = 0;
-                foreach (var message in MessageStreamIterator<TestAllTypes>.FromStreamProvider(() => stream)
-                    .WithSizeLimit(CodedInputStream.BufferSize*2))
-                {
-                    count++;
-                    TestUtil.AssertAllFieldsSet(message);
-                }
-                Assert.AreEqual(correctCount, count);
-            }
-        }
-    }
-}

+ 0 - 78
csharp/src/ProtocolBuffers.Test/MessageStreamWriterTest.cs

@@ -1,78 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System.IO;
-using NUnit.Framework;
-using NestedMessage = Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage;
-
-namespace Google.ProtocolBuffers
-{
-    public class MessageStreamWriterTest
-    {
-        internal static readonly byte[] ThreeMessageData = new byte[]
-                                                               {
-                                                                   (1 << 3) | 2, 2,
-                                                                   // Field 1, 2 bytes long (first message)
-                                                                   (1 << 3) | 0, 5, // Field 1, value 5
-                                                                   (1 << 3) | 2, 3,
-                                                                   // Field 1, 3 bytes long (second message)
-                                                                   (1 << 3) | 0, (1500 & 0x7f) | 0x80, 1500 >> 7,
-                                                                   // Field 1, value 1500
-                                                                   (1 << 3) | 2, 0, // Field 1, no data (third message)
-                                                               };
-
-        [Test]
-        public void ThreeMessages()
-        {
-            NestedMessage message1 = new NestedMessage.Builder {Bb = 5}.Build();
-            NestedMessage message2 = new NestedMessage.Builder {Bb = 1500}.Build();
-            NestedMessage message3 = new NestedMessage.Builder().Build();
-
-            byte[] data;
-            using (MemoryStream stream = new MemoryStream())
-            {
-                MessageStreamWriter<NestedMessage> writer = new MessageStreamWriter<NestedMessage>(stream);
-                writer.Write(message1);
-                writer.Write(message2);
-                writer.Write(message3);
-                writer.Flush();
-                data = stream.ToArray();
-            }
-
-            TestUtil.AssertEqualBytes(ThreeMessageData, data);
-        }
-    }
-}

+ 0 - 344
csharp/src/ProtocolBuffers.Test/MessageTest.cs

@@ -1,344 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System.IO;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    /// <summary>
-    /// Miscellaneous tests for message operations that apply to both
-    /// generated and dynamic messages.
-    /// </summary>
-    public class MessageTest
-    {
-        // =================================================================
-        // Message-merging tests.
-
-        private static readonly TestAllTypes MergeSource = new TestAllTypes.Builder
-                                                               {
-                                                                   OptionalInt32 = 1,
-                                                                   OptionalString = "foo",
-                                                                   OptionalForeignMessage =
-                                                                       ForeignMessage.DefaultInstance,
-                                                               }.AddRepeatedString("bar").Build();
-
-        private static readonly TestAllTypes MergeDest = new TestAllTypes.Builder
-                                                             {
-                                                                 OptionalInt64 = 2,
-                                                                 OptionalString = "baz",
-                                                                 OptionalForeignMessage =
-                                                                     new ForeignMessage.Builder {C = 3}.Build(),
-                                                             }.AddRepeatedString("qux").Build();
-
-        private const string MergeResultText =
-            "optional_int32: 1\n" +
-            "optional_int64: 2\n" +
-            "optional_string: \"foo\"\n" +
-            "optional_foreign_message {\n" +
-            "  c: 3\n" +
-            "}\n" +
-            "repeated_string: \"qux\"\n" +
-            "repeated_string: \"bar\"\n";
-
-        [Test]
-        public void MergeFrom()
-        {
-            TestAllTypes result = TestAllTypes.CreateBuilder(MergeDest).MergeFrom(MergeSource).Build();
-
-            Assert.AreEqual(MergeResultText, result.ToString());
-        }
-
-        /// <summary>
-        /// Test merging a DynamicMessage into a GeneratedMessage. 
-        /// As long as they have the same descriptor, this should work, but it is an
-        /// entirely different code path.
-        /// </summary>
-        [Test]
-        public void MergeFromDynamic()
-        {
-            TestAllTypes result = (TestAllTypes) TestAllTypes.CreateBuilder(MergeDest)
-                                                     .MergeFrom(DynamicMessage.CreateBuilder(MergeSource).Build())
-                                                     .Build();
-
-            Assert.AreEqual(MergeResultText, result.ToString());
-        }
-
-        /// <summary>
-        /// Test merging two DynamicMessages.
-        /// </summary>
-        [Test]
-        public void DynamicMergeFrom()
-        {
-            DynamicMessage result = (DynamicMessage) DynamicMessage.CreateBuilder(MergeDest)
-                                                         .MergeFrom(
-                                                             (DynamicMessage)
-                                                             DynamicMessage.CreateBuilder(MergeSource).Build())
-                                                         .Build();
-
-            Assert.AreEqual(MergeResultText, result.ToString());
-        }
-
-        // =================================================================
-        // Required-field-related tests.
-
-        private static readonly TestRequired TestRequiredUninitialized = TestRequired.DefaultInstance;
-
-        private static readonly TestRequired TestRequiredInitialized = new TestRequired.Builder
-                                                                           {
-                                                                               A = 1,
-                                                                               B = 2,
-                                                                               C = 3
-                                                                           }.Build();
-
-        [Test]
-        public void Initialization()
-        {
-            TestRequired.Builder builder = TestRequired.CreateBuilder();
-
-            Assert.IsFalse(builder.IsInitialized);
-            builder.A = 1;
-            Assert.IsFalse(builder.IsInitialized);
-            builder.B = 1;
-            Assert.IsFalse(builder.IsInitialized);
-            builder.C = 1;
-            Assert.IsTrue(builder.IsInitialized);
-        }
-
-        [Test]
-        public void UninitializedBuilderToString()
-        {
-            TestRequired.Builder builder = TestRequired.CreateBuilder().SetA(1);
-            Assert.AreEqual("a: 1\n", builder.ToString());
-        }
-
-        [Test]
-        public void RequiredForeign()
-        {
-            TestRequiredForeign.Builder builder = TestRequiredForeign.CreateBuilder();
-
-            Assert.IsTrue(builder.IsInitialized);
-
-            builder.SetOptionalMessage(TestRequiredUninitialized);
-            Assert.IsFalse(builder.IsInitialized);
-
-            builder.SetOptionalMessage(TestRequiredInitialized);
-            Assert.IsTrue(builder.IsInitialized);
-
-            builder.AddRepeatedMessage(TestRequiredUninitialized);
-            Assert.IsFalse(builder.IsInitialized);
-
-            builder.SetRepeatedMessage(0, TestRequiredInitialized);
-            Assert.IsTrue(builder.IsInitialized);
-        }
-
-        [Test]
-        public void RequiredExtension()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-
-            Assert.IsTrue(builder.IsInitialized);
-
-            builder.SetExtension(TestRequired.Single, TestRequiredUninitialized);
-            Assert.IsFalse(builder.IsInitialized);
-
-            builder.SetExtension(TestRequired.Single, TestRequiredInitialized);
-            Assert.IsTrue(builder.IsInitialized);
-
-            builder.AddExtension(TestRequired.Multi, TestRequiredUninitialized);
-            Assert.IsFalse(builder.IsInitialized);
-
-            builder.SetExtension(TestRequired.Multi, 0, TestRequiredInitialized);
-            Assert.IsTrue(builder.IsInitialized);
-        }
-
-        [Test]
-        public void RequiredDynamic()
-        {
-            MessageDescriptor descriptor = TestRequired.Descriptor;
-            DynamicMessage.Builder builder = DynamicMessage.CreateBuilder(descriptor);
-
-            Assert.IsFalse(builder.IsInitialized);
-            builder[descriptor.FindDescriptor<FieldDescriptor>("a")] = 1;
-            Assert.IsFalse(builder.IsInitialized);
-            builder[descriptor.FindDescriptor<FieldDescriptor>("b")] = 1;
-            Assert.IsFalse(builder.IsInitialized);
-            builder[descriptor.FindDescriptor<FieldDescriptor>("c")] = 1;
-            Assert.IsTrue(builder.IsInitialized);
-        }
-
-        [Test]
-        public void RequiredDynamicForeign()
-        {
-            MessageDescriptor descriptor = TestRequiredForeign.Descriptor;
-            DynamicMessage.Builder builder = DynamicMessage.CreateBuilder(descriptor);
-
-            Assert.IsTrue(builder.IsInitialized);
-
-            builder[descriptor.FindDescriptor<FieldDescriptor>("optional_message")] = TestRequiredUninitialized;
-            Assert.IsFalse(builder.IsInitialized);
-
-            builder[descriptor.FindDescriptor<FieldDescriptor>("optional_message")] = TestRequiredInitialized;
-            Assert.IsTrue(builder.IsInitialized);
-
-            builder.AddRepeatedField(descriptor.FindDescriptor<FieldDescriptor>("repeated_message"),
-                                     TestRequiredUninitialized);
-            Assert.IsFalse(builder.IsInitialized);
-
-            builder.SetRepeatedField(descriptor.FindDescriptor<FieldDescriptor>("repeated_message"), 0,
-                                     TestRequiredInitialized);
-            Assert.IsTrue(builder.IsInitialized);
-        }
-
-        [Test]
-        public void UninitializedException()
-        {
-            var e = Assert.Throws<UninitializedMessageException>(() => TestRequired.CreateBuilder().Build());
-            Assert.AreEqual("Message missing required fields: a, b, c", e.Message);
-        }
-
-        [Test]
-        public void BuildPartial()
-        {
-            // We're mostly testing that no exception is thrown.
-            TestRequired message = TestRequired.CreateBuilder().BuildPartial();
-            Assert.IsFalse(message.IsInitialized);
-        }
-
-        [Test]
-        public void NestedUninitializedException()
-        {
-            var e = Assert.Throws<UninitializedMessageException>(() => TestRequiredForeign.CreateBuilder()
-                    .SetOptionalMessage(TestRequiredUninitialized)
-                    .AddRepeatedMessage(TestRequiredUninitialized)
-                    .AddRepeatedMessage(TestRequiredUninitialized)
-                    .Build());
-            Assert.AreEqual(
-                "Message missing required fields: " +
-                "optional_message.a, " +
-                "optional_message.b, " +
-                "optional_message.c, " +
-                "repeated_message[0].a, " +
-                "repeated_message[0].b, " +
-                "repeated_message[0].c, " +
-                "repeated_message[1].a, " +
-                "repeated_message[1].b, " +
-                "repeated_message[1].c",
-                e.Message);
-        }
-
-        [Test]
-        public void BuildNestedPartial()
-        {
-            // We're mostly testing that no exception is thrown.
-            TestRequiredForeign message =
-                TestRequiredForeign.CreateBuilder()
-                    .SetOptionalMessage(TestRequiredUninitialized)
-                    .AddRepeatedMessage(TestRequiredUninitialized)
-                    .AddRepeatedMessage(TestRequiredUninitialized)
-                    .BuildPartial();
-            Assert.IsFalse(message.IsInitialized);
-        }
-
-        [Test]
-        public void ParseUninitialized()
-        {
-            var e = Assert.Throws<InvalidProtocolBufferException>(() => TestRequired.ParseFrom(ByteString.Empty));
-            Assert.AreEqual("Message missing required fields: a, b, c", e.Message);
-        }
-
-        [Test]
-        public void ParseNestedUnititialized()
-        {
-            ByteString data =
-                TestRequiredForeign.CreateBuilder()
-                    .SetOptionalMessage(TestRequiredUninitialized)
-                    .AddRepeatedMessage(TestRequiredUninitialized)
-                    .AddRepeatedMessage(TestRequiredUninitialized)
-                    .BuildPartial().ToByteString();
-
-            var e = Assert.Throws<InvalidProtocolBufferException>(() => TestRequiredForeign.ParseFrom(data));
-            Assert.AreEqual(
-                "Message missing required fields: " +
-                "optional_message.a, " +
-                "optional_message.b, " +
-                "optional_message.c, " +
-                "repeated_message[0].a, " +
-                "repeated_message[0].b, " +
-                "repeated_message[0].c, " +
-                "repeated_message[1].a, " +
-                "repeated_message[1].b, " +
-                "repeated_message[1].c",
-                e.Message);
-        }
-
-        [Test]
-        public void DynamicUninitializedException()
-        {
-            var e = Assert.Throws<UninitializedMessageException>(() => DynamicMessage.CreateBuilder(TestRequired.Descriptor).Build());
-            Assert.AreEqual("Message missing required fields: a, b, c", e.Message);
-        }
-
-        [Test]
-        public void DynamicBuildPartial()
-        {
-            // We're mostly testing that no exception is thrown.
-            DynamicMessage message = DynamicMessage.CreateBuilder(TestRequired.Descriptor).BuildPartial();
-            Assert.IsFalse(message.Initialized);
-        }
-
-        [Test]
-        public void DynamicParseUnititialized()
-        {
-            MessageDescriptor descriptor = TestRequired.Descriptor;
-            var e = Assert.Throws<InvalidProtocolBufferException>(() => DynamicMessage.ParseFrom(descriptor, ByteString.Empty));
-            Assert.AreEqual("Message missing required fields: a, b, c", e.Message);
-        }
-
-        [Test]
-        public void PackedTypesWrittenDirectlyToStream()
-        {
-            TestPackedTypes message = new TestPackedTypes.Builder {PackedInt32List = {0, 1, 2}}.Build();
-            MemoryStream stream = new MemoryStream();
-            message.WriteTo(stream);
-            stream.Position = 0;
-            TestPackedTypes readMessage = TestPackedTypes.ParseFrom(stream);
-            Assert.AreEqual(message, readMessage);
-        }
-    }
-}

+ 0 - 82
csharp/src/ProtocolBuffers.Test/MessageUtilTest.cs

@@ -1,82 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class MessageUtilTest
-    {
-        [Test]
-        public void NullTypeName()
-        {
-            Assert.Throws<ArgumentNullException>(() => MessageUtil.GetDefaultMessage((string) null));
-        }
-
-        [Test]
-        public void InvalidTypeName()
-        {
-            Assert.Throws<ArgumentException>(() => MessageUtil.GetDefaultMessage("invalidtypename"));
-        }
-
-        [Test]
-        public void ValidTypeName()
-        {
-            Assert.AreSame(TestAllTypes.DefaultInstance,
-                           MessageUtil.GetDefaultMessage(typeof(TestAllTypes).AssemblyQualifiedName));
-        }
-
-        [Test]
-        public void NullType()
-        {
-            Assert.Throws<ArgumentNullException>(() => MessageUtil.GetDefaultMessage((Type)null));
-        }
-
-        [Test]
-        public void NonMessageType()
-        {
-            Assert.Throws<ArgumentException>(() => MessageUtil.GetDefaultMessage(typeof(string)));
-        }
-
-        [Test]
-        public void ValidType()
-        {
-            Assert.AreSame(TestAllTypes.DefaultInstance, MessageUtil.GetDefaultMessage(typeof(TestAllTypes)));
-        }
-    }
-}

+ 0 - 81
csharp/src/ProtocolBuffers.Test/NameHelpersTest.cs

@@ -1,81 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class NameHelpersTest
-    {
-        [Test]
-        public void UnderscoresToPascalCase()
-        {
-            Assert.AreEqual("FooBar", NameHelpers.UnderscoresToPascalCase("Foo_bar"));
-            Assert.AreEqual("FooBar", NameHelpers.UnderscoresToPascalCase("foo_bar"));
-            Assert.AreEqual("Foo0Bar", NameHelpers.UnderscoresToPascalCase("Foo0bar"));
-            Assert.AreEqual("FooBar", NameHelpers.UnderscoresToPascalCase("Foo_+_Bar"));
-
-            Assert.AreEqual("Bar", NameHelpers.UnderscoresToPascalCase("__+bar"));
-            Assert.AreEqual("Bar", NameHelpers.UnderscoresToPascalCase("bar_"));
-            Assert.AreEqual("_0Bar", NameHelpers.UnderscoresToPascalCase("_0bar"));
-            Assert.AreEqual("_1Bar", NameHelpers.UnderscoresToPascalCase("_1_bar"));
-        }
-
-        [Test]
-        public void UnderscoresToCamelCase()
-        {
-            Assert.AreEqual("fooBar", NameHelpers.UnderscoresToCamelCase("Foo_bar"));
-            Assert.AreEqual("fooBar", NameHelpers.UnderscoresToCamelCase("foo_bar"));
-            Assert.AreEqual("foo0Bar", NameHelpers.UnderscoresToCamelCase("Foo0bar"));
-            Assert.AreEqual("fooBar", NameHelpers.UnderscoresToCamelCase("Foo_+_Bar"));
-
-            Assert.AreEqual("bar", NameHelpers.UnderscoresToCamelCase("__+bar"));
-            Assert.AreEqual("bar", NameHelpers.UnderscoresToCamelCase("bar_"));
-            Assert.AreEqual("_0Bar", NameHelpers.UnderscoresToCamelCase("_0bar"));
-            Assert.AreEqual("_1Bar", NameHelpers.UnderscoresToCamelCase("_1_bar"));
-        }
-
-        [Test]
-        public void StripSuffix()
-        {
-            string text = "FooBar";
-            Assert.IsFalse(NameHelpers.StripSuffix(ref text, "Foo"));
-            Assert.AreEqual("FooBar", text);
-            Assert.IsTrue(NameHelpers.StripSuffix(ref text, "Bar"));
-            Assert.AreEqual("Foo", text);
-        }
-    }
-}

+ 10 - 52
csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj

@@ -8,8 +8,8 @@
     <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>
     <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Google.ProtocolBuffers</RootNamespace>
-    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>
+    <RootNamespace>Google.Protobuf</RootNamespace>
+    <AssemblyName>Google.Protobuf.Test</AssemblyName>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <SignAssembly>true</SignAssembly>
@@ -71,79 +71,37 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="AbstractMessageTest.cs" />
     <Compile Include="ByteStringTest.cs" />
-    <Compile Include="FieldPresenceTest.cs" />
     <Compile Include="CodedInputStreamTest.cs" />
     <Compile Include="CodedOutputStreamTest.cs" />
-    <Compile Include="Collections\PopsicleListTest.cs" />
-    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />
-    <Compile Include="Compatibility\CompatibilityTests.cs" />
-    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />
-    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />
-    <Compile Include="Compatibility\TestResources.cs" />
-    <Compile Include="Compatibility\TextCompatibilityTests.cs" />
-    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />
-    <Compile Include="TestProtos\GoogleSize.cs" />
-    <Compile Include="TestProtos\GoogleSpeed.cs" />
-    <Compile Include="TestProtos\Unittest.cs" />
-    <Compile Include="TestProtos\UnittestCustomOptions.cs" />
-    <Compile Include="TestProtos\UnittestDropUnknownFields.cs" />
-    <Compile Include="TestProtos\UnittestEnormousDescriptor.cs" />
-    <Compile Include="TestProtos\UnittestExtrasXmltest.cs" />
-    <Compile Include="TestProtos\UnittestImport.cs" />
-    <Compile Include="TestProtos\UnittestImportPublic.cs" />
+    <Compile Include="GeneratedMessageTest.cs" />
+    <Compile Include="RepeatedFieldTest.cs" />
+    <Compile Include="TestProtos\UnittestImportProto3.cs" />
+    <Compile Include="TestProtos\UnittestImportPublicProto3.cs" />
     <Compile Include="TestProtos\UnittestIssues.cs" />
-    <Compile Include="TestProtos\UnittestMset.cs" />
-    <Compile Include="TestProtos\UnittestNoFieldPresence.cs" />
-    <Compile Include="TestProtos\UnittestOptimizeFor.cs" />
-    <Compile Include="TestProtos\UnknownEnumTest.cs" />
-    <Compile Include="TestResources.cs" />
-    <Compile Include="TestReaderForUrlEncoded.cs" />
+    <Compile Include="TestProtos\UnittestProto3.cs" />
     <Compile Include="DeprecatedMemberTest.cs" />
     <Compile Include="DescriptorsTest.cs" />
-    <Compile Include="DynamicMessageTest.cs" />
-    <Compile Include="ExtendableMessageTest.cs" />
-    <Compile Include="GeneratedBuilderTest.cs" />
-    <Compile Include="GeneratedMessageTest.cs" />
     <Compile Include="IssuesTest.cs" />
-    <Compile Include="MessageStreamIteratorTest.cs" />
-    <Compile Include="MessageStreamWriterTest.cs" />
-    <Compile Include="MessageTest.cs" />
-    <Compile Include="MessageUtilTest.cs" />
-    <Compile Include="NameHelpersTest.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ReflectionTester.cs" />
-    <Compile Include="ReusableBuilderTest.cs" />
     <Compile Include="TestCornerCases.cs" />
-    <Compile Include="TestMimeMessageFormats.cs" />
-    <Compile Include="TestUtil.cs" />
-    <Compile Include="TestWriterFormatJson.cs" />
-    <Compile Include="TestWriterFormatXml.cs" />
-    <Compile Include="TextFormatTest.cs" />
-    <Compile Include="UnknownFieldSetTest.cs" />
     <Compile Include="WireFormatTest.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.csproj">
-      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>
-      <Name>ProtocolBuffers.Serialization</Name>
-    </ProjectReference>
     <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">
       <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
       <Name>ProtocolBuffers</Name>
     </ProjectReference>
   </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Compatibility\google_message1.dat" />
-    <EmbeddedResource Include="Compatibility\google_message2.dat" />
-  </ItemGroup>
   <ItemGroup>
     <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
     <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
   </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Collections\" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.

+ 0 - 1033
csharp/src/ProtocolBuffers.Test/ReflectionTester.cs

@@ -1,1033 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-#pragma warning disable 618 // Disable warning about obsolete use miss-matched assert arguments
-
-namespace Google.ProtocolBuffers
-{
-    /// <summary>
-    /// Performs the same things that the methods of TestUtil do, but
-    /// via the reflection interface.  This is its own class because it needs
-    /// to know what descriptor to use.
-    /// </summary>
-    internal class ReflectionTester
-    {
-        private readonly MessageDescriptor baseDescriptor;
-        private readonly ExtensionRegistry extensionRegistry;
-
-        private readonly FileDescriptor file;
-        private readonly FileDescriptor importFile;
-
-        private readonly MessageDescriptor optionalGroup;
-        private readonly MessageDescriptor repeatedGroup;
-        private readonly MessageDescriptor nestedMessage;
-        private readonly MessageDescriptor foreignMessage;
-        private readonly MessageDescriptor importMessage;
-
-        private readonly FieldDescriptor groupA;
-        private readonly FieldDescriptor repeatedGroupA;
-        private readonly FieldDescriptor nestedB;
-        private readonly FieldDescriptor foreignC;
-        private readonly FieldDescriptor importD;
-
-        private readonly EnumDescriptor nestedEnum;
-        private readonly EnumDescriptor foreignEnum;
-        private readonly EnumDescriptor importEnum;
-
-        private readonly EnumValueDescriptor nestedFoo;
-        private readonly EnumValueDescriptor nestedBar;
-        private readonly EnumValueDescriptor nestedBaz;
-        private readonly EnumValueDescriptor foreignFoo;
-        private readonly EnumValueDescriptor foreignBar;
-        private readonly EnumValueDescriptor foreignBaz;
-        private readonly EnumValueDescriptor importFoo;
-        private readonly EnumValueDescriptor importBar;
-        private readonly EnumValueDescriptor importBaz;
-
-        /// <summary>
-        /// Constructs an instance that will expect messages using the given
-        /// descriptor. Normally <paramref name="baseDescriptor"/> should be
-        /// a descriptor for TestAllTypes. However, if extensionRegistry is non-null,
-        /// then baseDescriptor should be for TestAllExtensions instead, and instead of
-        /// reading and writing normal fields, the tester will read and write extensions.
-        /// All of the TestAllExtensions extensions must be registered in the registry.
-        /// </summary>
-        private ReflectionTester(MessageDescriptor baseDescriptor,
-                                 ExtensionRegistry extensionRegistry)
-        {
-            this.baseDescriptor = baseDescriptor;
-            this.extensionRegistry = extensionRegistry;
-
-            this.file = baseDescriptor.File;
-            Assert.AreEqual(1, file.Dependencies.Count);
-            this.importFile = file.Dependencies[0];
-
-            MessageDescriptor testAllTypes;
-            if (baseDescriptor.Name == "TestAllTypes")
-            {
-                testAllTypes = baseDescriptor;
-            }
-            else
-            {
-                testAllTypes = file.FindTypeByName<MessageDescriptor>("TestAllTypes");
-                Assert.NotNull(testAllTypes);
-            }
-
-            if (extensionRegistry == null)
-            {
-                // Use testAllTypes, rather than baseDescriptor, to allow
-                // initialization using TestPackedTypes descriptors. These objects
-                // won't be used by the methods for packed fields.
-                this.optionalGroup =
-                    testAllTypes.FindDescriptor<MessageDescriptor>("OptionalGroup");
-                this.repeatedGroup =
-                    testAllTypes.FindDescriptor<MessageDescriptor>("RepeatedGroup");
-            }
-            else
-            {
-                this.optionalGroup =
-                    file.FindTypeByName<MessageDescriptor>("OptionalGroup_extension");
-                this.repeatedGroup =
-                    file.FindTypeByName<MessageDescriptor>("RepeatedGroup_extension");
-            }
-            this.nestedMessage = testAllTypes.FindDescriptor<MessageDescriptor>("NestedMessage");
-            this.foreignMessage = file.FindTypeByName<MessageDescriptor>("ForeignMessage");
-            this.importMessage = importFile.FindTypeByName<MessageDescriptor>("ImportMessage");
-
-            this.nestedEnum = testAllTypes.FindDescriptor<EnumDescriptor>("NestedEnum");
-            this.foreignEnum = file.FindTypeByName<EnumDescriptor>("ForeignEnum");
-            this.importEnum = importFile.FindTypeByName<EnumDescriptor>("ImportEnum");
-
-            Assert.NotNull(optionalGroup);
-            Assert.NotNull(repeatedGroup);
-            Assert.NotNull(nestedMessage);
-            Assert.NotNull(foreignMessage);
-            Assert.NotNull(importMessage);
-            Assert.NotNull(nestedEnum);
-            Assert.NotNull(foreignEnum);
-            Assert.NotNull(importEnum);
-
-            this.nestedB = nestedMessage.FindDescriptor<FieldDescriptor>("bb");
-            this.foreignC = foreignMessage.FindDescriptor<FieldDescriptor>("c");
-            this.importD = importMessage.FindDescriptor<FieldDescriptor>("d");
-            this.nestedFoo = nestedEnum.FindValueByName("FOO");
-            this.nestedBar = nestedEnum.FindValueByName("BAR");
-            this.nestedBaz = nestedEnum.FindValueByName("BAZ");
-            this.foreignFoo = foreignEnum.FindValueByName("FOREIGN_FOO");
-            this.foreignBar = foreignEnum.FindValueByName("FOREIGN_BAR");
-            this.foreignBaz = foreignEnum.FindValueByName("FOREIGN_BAZ");
-            this.importFoo = importEnum.FindValueByName("IMPORT_FOO");
-            this.importBar = importEnum.FindValueByName("IMPORT_BAR");
-            this.importBaz = importEnum.FindValueByName("IMPORT_BAZ");
-
-            this.groupA = optionalGroup.FindDescriptor<FieldDescriptor>("a");
-            this.repeatedGroupA = repeatedGroup.FindDescriptor<FieldDescriptor>("a");
-
-            Assert.NotNull(groupA);
-            Assert.NotNull(repeatedGroupA);
-            Assert.NotNull(nestedB);
-            Assert.NotNull(foreignC);
-            Assert.NotNull(importD);
-            Assert.NotNull(nestedFoo);
-            Assert.NotNull(nestedBar);
-            Assert.NotNull(nestedBaz);
-            Assert.NotNull(foreignFoo);
-            Assert.NotNull(foreignBar);
-            Assert.NotNull(foreignBaz);
-            Assert.NotNull(importFoo);
-            Assert.NotNull(importBar);
-            Assert.NotNull(importBaz);
-        }
-
-        /// <summary>
-        /// Creates an instance for the TestAllTypes message, with no extension registry.
-        /// </summary>
-        public static ReflectionTester CreateTestAllTypesInstance()
-        {
-            return new ReflectionTester(TestAllTypes.Descriptor, null);
-        }
-
-        /// <summary>
-        /// Creates an instance for the TestAllExtensions message, with an
-        /// extension registry from TestUtil.CreateExtensionRegistry.
-        /// </summary>
-        public static ReflectionTester CreateTestAllExtensionsInstance()
-        {
-            return new ReflectionTester(TestAllExtensions.Descriptor, TestUtil.CreateExtensionRegistry());
-        }
-
-        /// <summary>
-        /// Creates an instance for the TestPackedTypes message, with no extensions.
-        /// </summary>
-        public static ReflectionTester CreateTestPackedTypesInstance()
-        {
-            return new ReflectionTester(TestPackedTypes.Descriptor, null);
-        }
-
-        /// <summary>
-        /// Shorthand to get a FieldDescriptor for a field of unittest::TestAllTypes.
-        /// </summary>
-        private FieldDescriptor f(String name)
-        {
-            FieldDescriptor result;
-            if (extensionRegistry == null)
-            {
-                result = baseDescriptor.FindDescriptor<FieldDescriptor>(name);
-            }
-            else
-            {
-                result = file.FindTypeByName<FieldDescriptor>(name + "_extension");
-            }
-            Assert.NotNull(result);
-            return result;
-        }
-
-        /// <summary>
-        /// Calls parent.CreateBuilderForField() or uses the extension registry
-        /// to find an appropriate builder, depending on what type is being tested.
-        /// </summary>
-        private IBuilder CreateBuilderForField(IBuilder parent, FieldDescriptor field)
-        {
-            if (extensionRegistry == null)
-            {
-                return parent.CreateBuilderForField(field);
-            }
-            else
-            {
-                ExtensionInfo extension = extensionRegistry[field.ContainingType, field.FieldNumber];
-                Assert.NotNull(extension);
-                Assert.NotNull(extension.DefaultInstance);
-                return (IBuilder) extension.DefaultInstance.WeakCreateBuilderForType();
-            }
-        }
-
-        /// <summary>
-        /// Sets every field of the message to the values expected by
-        /// AssertAllFieldsSet, using the reflection interface.
-        /// </summary>
-        /// <param name="message"></param>
-        internal void SetAllFieldsViaReflection(IBuilder message)
-        {
-            message[f("optional_int32")] = 101;
-            message[f("optional_int64")] = 102L;
-            message[f("optional_uint32")] = 103U;
-            message[f("optional_uint64")] = 104UL;
-            message[f("optional_sint32")] = 105;
-            message[f("optional_sint64")] = 106L;
-            message[f("optional_fixed32")] = 107U;
-            message[f("optional_fixed64")] = 108UL;
-            message[f("optional_sfixed32")] = 109;
-            message[f("optional_sfixed64")] = 110L;
-            message[f("optional_float")] = 111F;
-            message[f("optional_double")] = 112D;
-            message[f("optional_bool")] = true;
-            message[f("optional_string")] = "115";
-            message[f("optional_bytes")] = TestUtil.ToBytes("116");
-
-            message[f("optionalgroup")] =
-                CreateBuilderForField(message, f("optionalgroup")).SetField(groupA, 117).WeakBuild();
-            message[f("optional_nested_message")] =
-                CreateBuilderForField(message, f("optional_nested_message")).SetField(nestedB, 118).WeakBuild();
-            message[f("optional_foreign_message")] =
-                CreateBuilderForField(message, f("optional_foreign_message")).SetField(foreignC, 119).WeakBuild();
-            message[f("optional_import_message")] =
-                CreateBuilderForField(message, f("optional_import_message")).SetField(importD, 120).WeakBuild();
-
-            message[f("optional_nested_enum")] = nestedBaz;
-            message[f("optional_foreign_enum")] = foreignBaz;
-            message[f("optional_import_enum")] = importBaz;
-
-            message[f("optional_string_piece")] = "124";
-            message[f("optional_cord")] = "125";
-
-            // -----------------------------------------------------------------
-
-            message.WeakAddRepeatedField(f("repeated_int32"), 201);
-            message.WeakAddRepeatedField(f("repeated_int64"), 202L);
-            message.WeakAddRepeatedField(f("repeated_uint32"), 203U);
-            message.WeakAddRepeatedField(f("repeated_uint64"), 204UL);
-            message.WeakAddRepeatedField(f("repeated_sint32"), 205);
-            message.WeakAddRepeatedField(f("repeated_sint64"), 206L);
-            message.WeakAddRepeatedField(f("repeated_fixed32"), 207U);
-            message.WeakAddRepeatedField(f("repeated_fixed64"), 208UL);
-            message.WeakAddRepeatedField(f("repeated_sfixed32"), 209);
-            message.WeakAddRepeatedField(f("repeated_sfixed64"), 210L);
-            message.WeakAddRepeatedField(f("repeated_float"), 211F);
-            message.WeakAddRepeatedField(f("repeated_double"), 212D);
-            message.WeakAddRepeatedField(f("repeated_bool"), true);
-            message.WeakAddRepeatedField(f("repeated_string"), "215");
-            message.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("216"));
-
-
-            message.WeakAddRepeatedField(f("repeatedgroup"),
-                                         CreateBuilderForField(message, f("repeatedgroup")).SetField(repeatedGroupA, 217)
-                                             .WeakBuild());
-            message.WeakAddRepeatedField(f("repeated_nested_message"),
-                                         CreateBuilderForField(message, f("repeated_nested_message")).SetField(nestedB,
-                                                                                                               218).
-                                             WeakBuild());
-            message.WeakAddRepeatedField(f("repeated_foreign_message"),
-                                         CreateBuilderForField(message, f("repeated_foreign_message")).SetField(
-                                             foreignC, 219).WeakBuild());
-            message.WeakAddRepeatedField(f("repeated_import_message"),
-                                         CreateBuilderForField(message, f("repeated_import_message")).SetField(importD,
-                                                                                                               220).
-                                             WeakBuild());
-
-            message.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBar);
-            message.WeakAddRepeatedField(f("repeated_foreign_enum"), foreignBar);
-            message.WeakAddRepeatedField(f("repeated_import_enum"), importBar);
-
-            message.WeakAddRepeatedField(f("repeated_string_piece"), "224");
-            message.WeakAddRepeatedField(f("repeated_cord"), "225");
-
-            // Add a second one of each field.
-            message.WeakAddRepeatedField(f("repeated_int32"), 301);
-            message.WeakAddRepeatedField(f("repeated_int64"), 302L);
-            message.WeakAddRepeatedField(f("repeated_uint32"), 303U);
-            message.WeakAddRepeatedField(f("repeated_uint64"), 304UL);
-            message.WeakAddRepeatedField(f("repeated_sint32"), 305);
-            message.WeakAddRepeatedField(f("repeated_sint64"), 306L);
-            message.WeakAddRepeatedField(f("repeated_fixed32"), 307U);
-            message.WeakAddRepeatedField(f("repeated_fixed64"), 308UL);
-            message.WeakAddRepeatedField(f("repeated_sfixed32"), 309);
-            message.WeakAddRepeatedField(f("repeated_sfixed64"), 310L);
-            message.WeakAddRepeatedField(f("repeated_float"), 311F);
-            message.WeakAddRepeatedField(f("repeated_double"), 312D);
-            message.WeakAddRepeatedField(f("repeated_bool"), false);
-            message.WeakAddRepeatedField(f("repeated_string"), "315");
-            message.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("316"));
-
-            message.WeakAddRepeatedField(f("repeatedgroup"),
-                                         CreateBuilderForField(message, f("repeatedgroup"))
-                                             .SetField(repeatedGroupA, 317).WeakBuild());
-            message.WeakAddRepeatedField(f("repeated_nested_message"),
-                                         CreateBuilderForField(message, f("repeated_nested_message"))
-                                             .SetField(nestedB, 318).WeakBuild());
-            message.WeakAddRepeatedField(f("repeated_foreign_message"),
-                                         CreateBuilderForField(message, f("repeated_foreign_message"))
-                                             .SetField(foreignC, 319).WeakBuild());
-            message.WeakAddRepeatedField(f("repeated_import_message"),
-                                         CreateBuilderForField(message, f("repeated_import_message"))
-                                             .SetField(importD, 320).WeakBuild());
-
-            message.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBaz);
-            message.WeakAddRepeatedField(f("repeated_foreign_enum"), foreignBaz);
-            message.WeakAddRepeatedField(f("repeated_import_enum"), importBaz);
-
-            message.WeakAddRepeatedField(f("repeated_string_piece"), "324");
-            message.WeakAddRepeatedField(f("repeated_cord"), "325");
-
-            // -----------------------------------------------------------------
-
-            message[f("default_int32")] = 401;
-            message[f("default_int64")] = 402L;
-            message[f("default_uint32")] = 403U;
-            message[f("default_uint64")] = 404UL;
-            message[f("default_sint32")] = 405;
-            message[f("default_sint64")] = 406L;
-            message[f("default_fixed32")] = 407U;
-            message[f("default_fixed64")] = 408UL;
-            message[f("default_sfixed32")] = 409;
-            message[f("default_sfixed64")] = 410L;
-            message[f("default_float")] = 411F;
-            message[f("default_double")] = 412D;
-            message[f("default_bool")] = false;
-            message[f("default_string")] = "415";
-            message[f("default_bytes")] = TestUtil.ToBytes("416");
-
-            message[f("default_nested_enum")] = nestedFoo;
-            message[f("default_foreign_enum")] = foreignFoo;
-            message[f("default_import_enum")] = importFoo;
-
-            message[f("default_string_piece")] = "424";
-            message[f("default_cord")] = "425";
-
-            message[f("oneof_uint32")] = 601U;
-            message[f("oneof_nested_message")] =
-                CreateBuilderForField(message, f("optional_nested_message")).SetField(nestedB, 602).WeakBuild();
-            message[f("oneof_string")] = "603";
-            message[f("oneof_bytes")] = TestUtil.ToBytes("604");
-        }
-
-        /// <summary>
-        /// Clears every field of the message, using the reflection interface.
-        /// </summary>
-        /// <param name="message"></param>
-        internal void ClearAllFieldsViaReflection(IBuilder message)
-        {
-            foreach (FieldDescriptor field in message.AllFields.Keys)
-            {
-                message.WeakClearField(field);
-            }
-        }
-
-        // -------------------------------------------------------------------
-
-        /// <summary>
-        /// Modify the repeated fields of the specified message to contain the
-        /// values expected by AssertRepeatedFieldsModified, using the IBuilder
-        /// reflection interface.
-        /// </summary>
-        internal void ModifyRepeatedFieldsViaReflection(IBuilder message)
-        {
-            message[f("repeated_int32"), 1] = 501;
-            message[f("repeated_int64"), 1] = 502L;
-            message[f("repeated_uint32"), 1] = 503U;
-            message[f("repeated_uint64"), 1] = 504UL;
-            message[f("repeated_sint32"), 1] = 505;
-            message[f("repeated_sint64"), 1] = 506L;
-            message[f("repeated_fixed32"), 1] = 507U;
-            message[f("repeated_fixed64"), 1] = 508UL;
-            message[f("repeated_sfixed32"), 1] = 509;
-            message[f("repeated_sfixed64"), 1] = 510L;
-            message[f("repeated_float"), 1] = 511F;
-            message[f("repeated_double"), 1] = 512D;
-            message[f("repeated_bool"), 1] = true;
-            message[f("repeated_string"), 1] = "515";
-            message.SetRepeatedField(f("repeated_bytes"), 1, TestUtil.ToBytes("516"));
-
-            message.SetRepeatedField(f("repeatedgroup"), 1,
-                                     CreateBuilderForField(message, f("repeatedgroup")).SetField(repeatedGroupA, 517).
-                                         WeakBuild());
-            message.SetRepeatedField(f("repeated_nested_message"), 1,
-                                     CreateBuilderForField(message, f("repeated_nested_message")).SetField(nestedB, 518)
-                                         .WeakBuild());
-            message.SetRepeatedField(f("repeated_foreign_message"), 1,
-                                     CreateBuilderForField(message, f("repeated_foreign_message")).SetField(foreignC,
-                                                                                                            519).
-                                         WeakBuild());
-            message.SetRepeatedField(f("repeated_import_message"), 1,
-                                     CreateBuilderForField(message, f("repeated_import_message")).SetField(importD, 520)
-                                         .WeakBuild());
-
-            message[f("repeated_nested_enum"), 1] = nestedFoo;
-            message[f("repeated_foreign_enum"), 1] = foreignFoo;
-            message[f("repeated_import_enum"), 1] = importFoo;
-
-            message[f("repeated_string_piece"), 1] = "524";
-            message[f("repeated_cord"), 1] = "525";
-        }
-
-        // -------------------------------------------------------------------
-
-        /// <summary>
-        /// Asserts that all fields of the specified message are set to the values
-        /// assigned by SetAllFields, using the IMessage reflection interface.
-        /// </summary>
-        public void AssertAllFieldsSetViaReflection(IMessage message)
-        {
-            Assert.IsTrue(message.HasField(f("optional_int32")));
-            Assert.IsTrue(message.HasField(f("optional_int64")));
-            Assert.IsTrue(message.HasField(f("optional_uint32")));
-            Assert.IsTrue(message.HasField(f("optional_uint64")));
-            Assert.IsTrue(message.HasField(f("optional_sint32")));
-            Assert.IsTrue(message.HasField(f("optional_sint64")));
-            Assert.IsTrue(message.HasField(f("optional_fixed32")));
-            Assert.IsTrue(message.HasField(f("optional_fixed64")));
-            Assert.IsTrue(message.HasField(f("optional_sfixed32")));
-            Assert.IsTrue(message.HasField(f("optional_sfixed64")));
-            Assert.IsTrue(message.HasField(f("optional_float")));
-            Assert.IsTrue(message.HasField(f("optional_double")));
-            Assert.IsTrue(message.HasField(f("optional_bool")));
-            Assert.IsTrue(message.HasField(f("optional_string")));
-            Assert.IsTrue(message.HasField(f("optional_bytes")));
-
-            Assert.IsTrue(message.HasField(f("optionalgroup")));
-            Assert.IsTrue(message.HasField(f("optional_nested_message")));
-            Assert.IsTrue(message.HasField(f("optional_foreign_message")));
-            Assert.IsTrue(message.HasField(f("optional_import_message")));
-
-            Assert.IsTrue(((IMessage) message[f("optionalgroup")]).HasField(groupA));
-            Assert.IsTrue(((IMessage) message[f("optional_nested_message")]).HasField(nestedB));
-            Assert.IsTrue(((IMessage) message[f("optional_foreign_message")]).HasField(foreignC));
-            Assert.IsTrue(((IMessage) message[f("optional_import_message")]).HasField(importD));
-
-            Assert.IsTrue(message.HasField(f("optional_nested_enum")));
-            Assert.IsTrue(message.HasField(f("optional_foreign_enum")));
-            Assert.IsTrue(message.HasField(f("optional_import_enum")));
-
-            Assert.IsTrue(message.HasField(f("optional_string_piece")));
-            Assert.IsTrue(message.HasField(f("optional_cord")));
-
-            Assert.AreEqual(101, message[f("optional_int32")]);
-            Assert.AreEqual(102L, message[f("optional_int64")]);
-            Assert.AreEqual(103u, message[f("optional_uint32")]);
-            Assert.AreEqual(104UL, message[f("optional_uint64")]);
-            Assert.AreEqual(105, message[f("optional_sint32")]);
-            Assert.AreEqual(106L, message[f("optional_sint64")]);
-            Assert.AreEqual(107U, message[f("optional_fixed32")]);
-            Assert.AreEqual(108UL, message[f("optional_fixed64")]);
-            Assert.AreEqual(109, message[f("optional_sfixed32")]);
-            Assert.AreEqual(110L, message[f("optional_sfixed64")]);
-            Assert.AreEqual(111F, message[f("optional_float")]);
-            Assert.AreEqual(112D, message[f("optional_double")]);
-            Assert.AreEqual(true, message[f("optional_bool")]);
-            Assert.AreEqual("115", message[f("optional_string")]);
-            Assert.AreEqual(TestUtil.ToBytes("116"), message[f("optional_bytes")]);
-
-            Assert.AreEqual(117, ((IMessage) message[f("optionalgroup")])[groupA]);
-            Assert.AreEqual(118, ((IMessage) message[f("optional_nested_message")])[nestedB]);
-            Assert.AreEqual(119, ((IMessage) message[f("optional_foreign_message")])[foreignC]);
-            Assert.AreEqual(120, ((IMessage) message[f("optional_import_message")])[importD]);
-
-            Assert.AreEqual(nestedBaz, message[f("optional_nested_enum")]);
-            Assert.AreEqual(foreignBaz, message[f("optional_foreign_enum")]);
-            Assert.AreEqual(importBaz, message[f("optional_import_enum")]);
-
-            Assert.AreEqual("124", message[f("optional_string_piece")]);
-            Assert.AreEqual("125", message[f("optional_cord")]);
-
-            // -----------------------------------------------------------------
-
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_float")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_double")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bool")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bytes")));
-
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeatedgroup")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_message")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_message")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_message")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_enum")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_enum")));
-
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string_piece")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_cord")));
-
-            Assert.AreEqual(201, message[f("repeated_int32"), 0]);
-            Assert.AreEqual(202L, message[f("repeated_int64"), 0]);
-            Assert.AreEqual(203U, message[f("repeated_uint32"), 0]);
-            Assert.AreEqual(204UL, message[f("repeated_uint64"), 0]);
-            Assert.AreEqual(205, message[f("repeated_sint32"), 0]);
-            Assert.AreEqual(206L, message[f("repeated_sint64"), 0]);
-            Assert.AreEqual(207U, message[f("repeated_fixed32"), 0]);
-            Assert.AreEqual(208UL, message[f("repeated_fixed64"), 0]);
-            Assert.AreEqual(209, message[f("repeated_sfixed32"), 0]);
-            Assert.AreEqual(210L, message[f("repeated_sfixed64"), 0]);
-            Assert.AreEqual(211F, message[f("repeated_float"), 0]);
-            Assert.AreEqual(212D, message[f("repeated_double"), 0]);
-            Assert.AreEqual(true, message[f("repeated_bool"), 0]);
-            Assert.AreEqual("215", message[f("repeated_string"), 0]);
-            Assert.AreEqual(TestUtil.ToBytes("216"), message[f("repeated_bytes"), 0]);
-
-            Assert.AreEqual(217, ((IMessage) message[f("repeatedgroup"), 0])[repeatedGroupA]);
-            Assert.AreEqual(218, ((IMessage) message[f("repeated_nested_message"), 0])[nestedB]);
-            Assert.AreEqual(219, ((IMessage) message[f("repeated_foreign_message"), 0])[foreignC]);
-            Assert.AreEqual(220, ((IMessage) message[f("repeated_import_message"), 0])[importD]);
-
-            Assert.AreEqual(nestedBar, message[f("repeated_nested_enum"), 0]);
-            Assert.AreEqual(foreignBar, message[f("repeated_foreign_enum"), 0]);
-            Assert.AreEqual(importBar, message[f("repeated_import_enum"), 0]);
-
-            Assert.AreEqual("224", message[f("repeated_string_piece"), 0]);
-            Assert.AreEqual("225", message[f("repeated_cord"), 0]);
-
-            Assert.AreEqual(301, message[f("repeated_int32"), 1]);
-            Assert.AreEqual(302L, message[f("repeated_int64"), 1]);
-            Assert.AreEqual(303U, message[f("repeated_uint32"), 1]);
-            Assert.AreEqual(304UL, message[f("repeated_uint64"), 1]);
-            Assert.AreEqual(305, message[f("repeated_sint32"), 1]);
-            Assert.AreEqual(306L, message[f("repeated_sint64"), 1]);
-            Assert.AreEqual(307U, message[f("repeated_fixed32"), 1]);
-            Assert.AreEqual(308UL, message[f("repeated_fixed64"), 1]);
-            Assert.AreEqual(309, message[f("repeated_sfixed32"), 1]);
-            Assert.AreEqual(310L, message[f("repeated_sfixed64"), 1]);
-            Assert.AreEqual(311F, message[f("repeated_float"), 1]);
-            Assert.AreEqual(312D, message[f("repeated_double"), 1]);
-            Assert.AreEqual(false, message[f("repeated_bool"), 1]);
-            Assert.AreEqual("315", message[f("repeated_string"), 1]);
-            Assert.AreEqual(TestUtil.ToBytes("316"), message[f("repeated_bytes"), 1]);
-
-            Assert.AreEqual(317, ((IMessage) message[f("repeatedgroup"), 1])[repeatedGroupA]);
-            Assert.AreEqual(318, ((IMessage) message[f("repeated_nested_message"), 1])[nestedB]);
-            Assert.AreEqual(319, ((IMessage) message[f("repeated_foreign_message"), 1])[foreignC]);
-            Assert.AreEqual(320, ((IMessage) message[f("repeated_import_message"), 1])[importD]);
-
-            Assert.AreEqual(nestedBaz, message[f("repeated_nested_enum"), 1]);
-            Assert.AreEqual(foreignBaz, message[f("repeated_foreign_enum"), 1]);
-            Assert.AreEqual(importBaz, message[f("repeated_import_enum"), 1]);
-
-            Assert.AreEqual("324", message[f("repeated_string_piece"), 1]);
-            Assert.AreEqual("325", message[f("repeated_cord"), 1]);
-
-            // -----------------------------------------------------------------
-
-            Assert.IsTrue(message.HasField(f("default_int32")));
-            Assert.IsTrue(message.HasField(f("default_int64")));
-            Assert.IsTrue(message.HasField(f("default_uint32")));
-            Assert.IsTrue(message.HasField(f("default_uint64")));
-            Assert.IsTrue(message.HasField(f("default_sint32")));
-            Assert.IsTrue(message.HasField(f("default_sint64")));
-            Assert.IsTrue(message.HasField(f("default_fixed32")));
-            Assert.IsTrue(message.HasField(f("default_fixed64")));
-            Assert.IsTrue(message.HasField(f("default_sfixed32")));
-            Assert.IsTrue(message.HasField(f("default_sfixed64")));
-            Assert.IsTrue(message.HasField(f("default_float")));
-            Assert.IsTrue(message.HasField(f("default_double")));
-            Assert.IsTrue(message.HasField(f("default_bool")));
-            Assert.IsTrue(message.HasField(f("default_string")));
-            Assert.IsTrue(message.HasField(f("default_bytes")));
-
-            Assert.IsTrue(message.HasField(f("default_nested_enum")));
-            Assert.IsTrue(message.HasField(f("default_foreign_enum")));
-            Assert.IsTrue(message.HasField(f("default_import_enum")));
-
-            Assert.IsTrue(message.HasField(f("default_string_piece")));
-            Assert.IsTrue(message.HasField(f("default_cord")));
-
-            Assert.AreEqual(401, message[f("default_int32")]);
-            Assert.AreEqual(402L, message[f("default_int64")]);
-            Assert.AreEqual(403U, message[f("default_uint32")]);
-            Assert.AreEqual(404UL, message[f("default_uint64")]);
-            Assert.AreEqual(405, message[f("default_sint32")]);
-            Assert.AreEqual(406L, message[f("default_sint64")]);
-            Assert.AreEqual(407U, message[f("default_fixed32")]);
-            Assert.AreEqual(408UL, message[f("default_fixed64")]);
-            Assert.AreEqual(409, message[f("default_sfixed32")]);
-            Assert.AreEqual(410L, message[f("default_sfixed64")]);
-            Assert.AreEqual(411F, message[f("default_float")]);
-            Assert.AreEqual(412D, message[f("default_double")]);
-            Assert.AreEqual(false, message[f("default_bool")]);
-            Assert.AreEqual("415", message[f("default_string")]);
-            Assert.AreEqual(TestUtil.ToBytes("416"), message[f("default_bytes")]);
-
-            Assert.AreEqual(nestedFoo, message[f("default_nested_enum")]);
-            Assert.AreEqual(foreignFoo, message[f("default_foreign_enum")]);
-            Assert.AreEqual(importFoo, message[f("default_import_enum")]);
-
-            Assert.AreEqual("424", message[f("default_string_piece")]);
-            Assert.AreEqual("425", message[f("default_cord")]);
-            if (extensionRegistry == null)
-            {
-                Assert.IsFalse(message.HasField(f("oneof_uint32")));
-                Assert.IsFalse(message.HasField(f("oneof_nested_message")));
-                Assert.IsFalse(message.HasField(f("oneof_string")));
-            } else
-            {
-                Assert.IsTrue(message.HasField(f("oneof_uint32")));
-                Assert.IsTrue(message.HasField(f("oneof_nested_message")));
-                Assert.IsTrue(message.HasField(f("oneof_string")));
-                Assert.AreEqual(601U, message[f("oneof_uint32")]);
-                Assert.AreEqual(602, ((IMessage)message[f("oneof_nested_message")])[nestedB]);
-                Assert.AreEqual("603", message[f("oneof_string")]);
-            }
-        }
-
-        /// <summary>
-        /// Assert that all fields of the message are cleared, and that
-        /// getting the fields returns their default values, using the reflection interface.
-        /// </summary>
-        public void AssertClearViaReflection(IMessage message)
-        {
-            // has_blah() should initially be false for all optional fields.
-            Assert.IsFalse(message.HasField(f("optional_int32")));
-            Assert.IsFalse(message.HasField(f("optional_int64")));
-            Assert.IsFalse(message.HasField(f("optional_uint32")));
-            Assert.IsFalse(message.HasField(f("optional_uint64")));
-            Assert.IsFalse(message.HasField(f("optional_sint32")));
-            Assert.IsFalse(message.HasField(f("optional_sint64")));
-            Assert.IsFalse(message.HasField(f("optional_fixed32")));
-            Assert.IsFalse(message.HasField(f("optional_fixed64")));
-            Assert.IsFalse(message.HasField(f("optional_sfixed32")));
-            Assert.IsFalse(message.HasField(f("optional_sfixed64")));
-            Assert.IsFalse(message.HasField(f("optional_float")));
-            Assert.IsFalse(message.HasField(f("optional_double")));
-            Assert.IsFalse(message.HasField(f("optional_bool")));
-            Assert.IsFalse(message.HasField(f("optional_string")));
-            Assert.IsFalse(message.HasField(f("optional_bytes")));
-
-            Assert.IsFalse(message.HasField(f("optionalgroup")));
-            Assert.IsFalse(message.HasField(f("optional_nested_message")));
-            Assert.IsFalse(message.HasField(f("optional_foreign_message")));
-            Assert.IsFalse(message.HasField(f("optional_import_message")));
-
-            Assert.IsFalse(message.HasField(f("optional_nested_enum")));
-            Assert.IsFalse(message.HasField(f("optional_foreign_enum")));
-            Assert.IsFalse(message.HasField(f("optional_import_enum")));
-
-            Assert.IsFalse(message.HasField(f("optional_string_piece")));
-            Assert.IsFalse(message.HasField(f("optional_cord")));
-
-            // Optional fields without defaults are set to zero or something like it.
-            Assert.AreEqual(0, message[f("optional_int32")]);
-            Assert.AreEqual(0L, message[f("optional_int64")]);
-            Assert.AreEqual(0U, message[f("optional_uint32")]);
-            Assert.AreEqual(0UL, message[f("optional_uint64")]);
-            Assert.AreEqual(0, message[f("optional_sint32")]);
-            Assert.AreEqual(0L, message[f("optional_sint64")]);
-            Assert.AreEqual(0U, message[f("optional_fixed32")]);
-            Assert.AreEqual(0UL, message[f("optional_fixed64")]);
-            Assert.AreEqual(0, message[f("optional_sfixed32")]);
-            Assert.AreEqual(0L, message[f("optional_sfixed64")]);
-            Assert.AreEqual(0F, message[f("optional_float")]);
-            Assert.AreEqual(0D, message[f("optional_double")]);
-            Assert.AreEqual(false, message[f("optional_bool")]);
-            Assert.AreEqual("", message[f("optional_string")]);
-            Assert.AreEqual(ByteString.Empty, message[f("optional_bytes")]);
-
-            // Embedded messages should also be clear.
-            Assert.IsFalse(((IMessage) message[f("optionalgroup")]).HasField(groupA));
-            Assert.IsFalse(((IMessage) message[f("optional_nested_message")])
-                               .HasField(nestedB));
-            Assert.IsFalse(((IMessage) message[f("optional_foreign_message")])
-                               .HasField(foreignC));
-            Assert.IsFalse(((IMessage) message[f("optional_import_message")])
-                               .HasField(importD));
-
-            Assert.AreEqual(0, ((IMessage) message[f("optionalgroup")])[groupA]);
-            Assert.AreEqual(0, ((IMessage) message[f("optional_nested_message")])[nestedB]);
-            Assert.AreEqual(0, ((IMessage) message[f("optional_foreign_message")])[foreignC]);
-            Assert.AreEqual(0, ((IMessage) message[f("optional_import_message")])[importD]);
-
-            // Enums without defaults are set to the first value in the enum.
-            Assert.AreEqual(nestedFoo, message[f("optional_nested_enum")]);
-            Assert.AreEqual(foreignFoo, message[f("optional_foreign_enum")]);
-            Assert.AreEqual(importFoo, message[f("optional_import_enum")]);
-
-            Assert.AreEqual("", message[f("optional_string_piece")]);
-            Assert.AreEqual("", message[f("optional_cord")]);
-
-            // Repeated fields are empty.
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_int32")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_int64")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_uint32")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_uint64")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sint32")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sint64")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_fixed32")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_fixed64")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sfixed32")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sfixed64")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_float")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_double")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_bool")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_string")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_bytes")));
-
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeatedgroup")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_nested_message")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_foreign_message")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_import_message")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_nested_enum")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_import_enum")));
-
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_string_piece")));
-            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_cord")));
-
-            // has_blah() should also be false for all default fields.
-            Assert.IsFalse(message.HasField(f("default_int32")));
-            Assert.IsFalse(message.HasField(f("default_int64")));
-            Assert.IsFalse(message.HasField(f("default_uint32")));
-            Assert.IsFalse(message.HasField(f("default_uint64")));
-            Assert.IsFalse(message.HasField(f("default_sint32")));
-            Assert.IsFalse(message.HasField(f("default_sint64")));
-            Assert.IsFalse(message.HasField(f("default_fixed32")));
-            Assert.IsFalse(message.HasField(f("default_fixed64")));
-            Assert.IsFalse(message.HasField(f("default_sfixed32")));
-            Assert.IsFalse(message.HasField(f("default_sfixed64")));
-            Assert.IsFalse(message.HasField(f("default_float")));
-            Assert.IsFalse(message.HasField(f("default_double")));
-            Assert.IsFalse(message.HasField(f("default_bool")));
-            Assert.IsFalse(message.HasField(f("default_string")));
-            Assert.IsFalse(message.HasField(f("default_bytes")));
-
-            Assert.IsFalse(message.HasField(f("default_nested_enum")));
-            Assert.IsFalse(message.HasField(f("default_foreign_enum")));
-            Assert.IsFalse(message.HasField(f("default_import_enum")));
-
-            Assert.IsFalse(message.HasField(f("default_string_piece")));
-            Assert.IsFalse(message.HasField(f("default_cord")));
-
-            // Fields with defaults have their default values (duh).
-            Assert.AreEqual(41, message[f("default_int32")]);
-            Assert.AreEqual(42L, message[f("default_int64")]);
-            Assert.AreEqual(43U, message[f("default_uint32")]);
-            Assert.AreEqual(44UL, message[f("default_uint64")]);
-            Assert.AreEqual(-45, message[f("default_sint32")]);
-            Assert.AreEqual(46L, message[f("default_sint64")]);
-            Assert.AreEqual(47U, message[f("default_fixed32")]);
-            Assert.AreEqual(48UL, message[f("default_fixed64")]);
-            Assert.AreEqual(49, message[f("default_sfixed32")]);
-            Assert.AreEqual(-50L, message[f("default_sfixed64")]);
-            Assert.AreEqual(51.5F, message[f("default_float")]);
-            Assert.AreEqual(52e3D, message[f("default_double")]);
-            Assert.AreEqual(true, message[f("default_bool")]);
-            Assert.AreEqual("hello", message[f("default_string")]);
-            Assert.AreEqual(TestUtil.ToBytes("world"), message[f("default_bytes")]);
-
-            Assert.AreEqual(nestedBar, message[f("default_nested_enum")]);
-            Assert.AreEqual(foreignBar, message[f("default_foreign_enum")]);
-            Assert.AreEqual(importBar, message[f("default_import_enum")]);
-
-            Assert.AreEqual("abc", message[f("default_string_piece")]);
-            Assert.AreEqual("123", message[f("default_cord")]);
-
-            Assert.IsFalse(message.HasField(f("oneof_uint32")));
-            Assert.IsFalse(message.HasField(f("oneof_nested_message")));
-            Assert.IsFalse(message.HasField(f("oneof_string")));
-            Assert.IsFalse(message.HasField(f("oneof_bytes")));
-
-            Assert.AreEqual(0U, message[f("oneof_uint32")]);
-            Assert.AreEqual("", message[f("oneof_string")]);
-            Assert.AreEqual(TestUtil.ToBytes(""), message[f("oneof_bytes")]);
-        }
-
-        // ---------------------------------------------------------------
-
-        internal void AssertRepeatedFieldsModifiedViaReflection(IMessage message)
-        {
-            // ModifyRepeatedFields only sets the second repeated element of each
-            // field.  In addition to verifying this, we also verify that the first
-            // element and size were *not* modified.
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_float")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_double")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bool")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bytes")));
-
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeatedgroup")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_message")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_message")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_message")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_enum")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_enum")));
-
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string_piece")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_cord")));
-
-            Assert.AreEqual(201, message[f("repeated_int32"), 0]);
-            Assert.AreEqual(202L, message[f("repeated_int64"), 0]);
-            Assert.AreEqual(203U, message[f("repeated_uint32"), 0]);
-            Assert.AreEqual(204UL, message[f("repeated_uint64"), 0]);
-            Assert.AreEqual(205, message[f("repeated_sint32"), 0]);
-            Assert.AreEqual(206L, message[f("repeated_sint64"), 0]);
-            Assert.AreEqual(207U, message[f("repeated_fixed32"), 0]);
-            Assert.AreEqual(208UL, message[f("repeated_fixed64"), 0]);
-            Assert.AreEqual(209, message[f("repeated_sfixed32"), 0]);
-            Assert.AreEqual(210L, message[f("repeated_sfixed64"), 0]);
-            Assert.AreEqual(211F, message[f("repeated_float"), 0]);
-            Assert.AreEqual(212D, message[f("repeated_double"), 0]);
-            Assert.AreEqual(true, message[f("repeated_bool"), 0]);
-            Assert.AreEqual("215", message[f("repeated_string"), 0]);
-            Assert.AreEqual(TestUtil.ToBytes("216"), message[f("repeated_bytes"), 0]);
-
-            Assert.AreEqual(217, ((IMessage) message[f("repeatedgroup"), 0])[repeatedGroupA]);
-            Assert.AreEqual(218, ((IMessage) message[f("repeated_nested_message"), 0])[nestedB]);
-            Assert.AreEqual(219, ((IMessage) message[f("repeated_foreign_message"), 0])[foreignC]);
-            Assert.AreEqual(220, ((IMessage) message[f("repeated_import_message"), 0])[importD]);
-
-            Assert.AreEqual(nestedBar, message[f("repeated_nested_enum"), 0]);
-            Assert.AreEqual(foreignBar, message[f("repeated_foreign_enum"), 0]);
-            Assert.AreEqual(importBar, message[f("repeated_import_enum"), 0]);
-
-            Assert.AreEqual("224", message[f("repeated_string_piece"), 0]);
-            Assert.AreEqual("225", message[f("repeated_cord"), 0]);
-
-            Assert.AreEqual(501, message[f("repeated_int32"), 1]);
-            Assert.AreEqual(502L, message[f("repeated_int64"), 1]);
-            Assert.AreEqual(503U, message[f("repeated_uint32"), 1]);
-            Assert.AreEqual(504UL, message[f("repeated_uint64"), 1]);
-            Assert.AreEqual(505, message[f("repeated_sint32"), 1]);
-            Assert.AreEqual(506L, message[f("repeated_sint64"), 1]);
-            Assert.AreEqual(507U, message[f("repeated_fixed32"), 1]);
-            Assert.AreEqual(508UL, message[f("repeated_fixed64"), 1]);
-            Assert.AreEqual(509, message[f("repeated_sfixed32"), 1]);
-            Assert.AreEqual(510L, message[f("repeated_sfixed64"), 1]);
-            Assert.AreEqual(511F, message[f("repeated_float"), 1]);
-            Assert.AreEqual(512D, message[f("repeated_double"), 1]);
-            Assert.AreEqual(true, message[f("repeated_bool"), 1]);
-            Assert.AreEqual("515", message[f("repeated_string"), 1]);
-            Assert.AreEqual(TestUtil.ToBytes("516"), message[f("repeated_bytes"), 1]);
-
-            Assert.AreEqual(517, ((IMessage) message[f("repeatedgroup"), 1])[repeatedGroupA]);
-            Assert.AreEqual(518, ((IMessage) message[f("repeated_nested_message"), 1])[nestedB]);
-            Assert.AreEqual(519, ((IMessage) message[f("repeated_foreign_message"), 1])[foreignC]);
-            Assert.AreEqual(520, ((IMessage) message[f("repeated_import_message"), 1])[importD]);
-
-            Assert.AreEqual(nestedFoo, message[f("repeated_nested_enum"), 1]);
-            Assert.AreEqual(foreignFoo, message[f("repeated_foreign_enum"), 1]);
-            Assert.AreEqual(importFoo, message[f("repeated_import_enum"), 1]);
-
-            Assert.AreEqual("524", message[f("repeated_string_piece"), 1]);
-            Assert.AreEqual("525", message[f("repeated_cord"), 1]);
-        }
-
-        /// <summary>
-        /// Verifies that the reflection setters for the given Builder object throw an
-        /// ArgumentNullException if they are passed a null value. 
-        /// </summary>
-        public void AssertReflectionSettersRejectNull(IBuilder builder)
-        {
-            Assert.Throws<ArgumentNullException>(() => builder[f("optional_string")] = null);
-            Assert.Throws<ArgumentNullException>(() => builder[f("optional_bytes")] = null);
-            Assert.Throws<ArgumentNullException>(() => builder[f("optional_nested_enum")] = null);
-            Assert.Throws<ArgumentNullException>(() => builder[f("optional_nested_message")] = null);
-            Assert.Throws<ArgumentNullException>(() => builder[f("optional_nested_message")] = null);
-            Assert.Throws<ArgumentNullException>(() => builder.WeakAddRepeatedField(f("repeated_string"), null));
-            Assert.Throws<ArgumentNullException>(() => builder.WeakAddRepeatedField(f("repeated_bytes"), null));
-            Assert.Throws<ArgumentNullException>(() => builder.WeakAddRepeatedField(f("repeated_nested_enum"), null));
-            Assert.Throws<ArgumentNullException>(() => builder.WeakAddRepeatedField(f("repeated_nested_message"), null));
-        }
-
-        /// <summary>
-        /// Verifies that the reflection repeated setters for the given Builder object throw an
-        /// ArgumentNullException if they are passed a null value.
-        /// </summary>
-        public void AssertReflectionRepeatedSettersRejectNull(IBuilder builder)
-        {
-            builder.WeakAddRepeatedField(f("repeated_string"), "one");
-            Assert.Throws<ArgumentNullException>(() => builder.SetRepeatedField(f("repeated_string"), 0, null));
-            builder.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("one"));
-            Assert.Throws<ArgumentNullException>(() => builder.SetRepeatedField(f("repeated_bytes"), 0, null));
-            builder.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBaz);
-            Assert.Throws<ArgumentNullException>(() => builder.SetRepeatedField(f("repeated_nested_enum"), 0, null));
-            builder.WeakAddRepeatedField(f("repeated_nested_message"),
-                                         new TestAllTypes.Types.NestedMessage.Builder {Bb = 218}.Build());
-            Assert.Throws<ArgumentNullException>(() => builder.SetRepeatedField(f("repeated_nested_message"), 0, null));
-        }
-
-        public void SetPackedFieldsViaReflection(IBuilder message)
-        {
-            message.WeakAddRepeatedField(f("packed_int32"), 601);
-            message.WeakAddRepeatedField(f("packed_int64"), 602L);
-            message.WeakAddRepeatedField(f("packed_uint32"), 603U);
-            message.WeakAddRepeatedField(f("packed_uint64"), 604UL);
-            message.WeakAddRepeatedField(f("packed_sint32"), 605);
-            message.WeakAddRepeatedField(f("packed_sint64"), 606L);
-            message.WeakAddRepeatedField(f("packed_fixed32"), 607U);
-            message.WeakAddRepeatedField(f("packed_fixed64"), 608UL);
-            message.WeakAddRepeatedField(f("packed_sfixed32"), 609);
-            message.WeakAddRepeatedField(f("packed_sfixed64"), 610L);
-            message.WeakAddRepeatedField(f("packed_float"), 611F);
-            message.WeakAddRepeatedField(f("packed_double"), 612D);
-            message.WeakAddRepeatedField(f("packed_bool"), true);
-            message.WeakAddRepeatedField(f("packed_enum"), foreignBar);
-            // Add a second one of each field.
-            message.WeakAddRepeatedField(f("packed_int32"), 701);
-            message.WeakAddRepeatedField(f("packed_int64"), 702L);
-            message.WeakAddRepeatedField(f("packed_uint32"), 703U);
-            message.WeakAddRepeatedField(f("packed_uint64"), 704UL);
-            message.WeakAddRepeatedField(f("packed_sint32"), 705);
-            message.WeakAddRepeatedField(f("packed_sint64"), 706L);
-            message.WeakAddRepeatedField(f("packed_fixed32"), 707U);
-            message.WeakAddRepeatedField(f("packed_fixed64"), 708UL);
-            message.WeakAddRepeatedField(f("packed_sfixed32"), 709);
-            message.WeakAddRepeatedField(f("packed_sfixed64"), 710L);
-            message.WeakAddRepeatedField(f("packed_float"), 711F);
-            message.WeakAddRepeatedField(f("packed_double"), 712D);
-            message.WeakAddRepeatedField(f("packed_bool"), false);
-            message.WeakAddRepeatedField(f("packed_enum"), foreignBaz);
-        }
-
-        public void AssertPackedFieldsSetViaReflection(IMessage message)
-        {
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_int32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_int64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_uint32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_uint64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sint32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sint64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_fixed32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_fixed64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sfixed32")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sfixed64")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_float")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_double")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_bool")));
-            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_enum")));
-
-            Assert.AreEqual(601, message[f("packed_int32"), 0]);
-            Assert.AreEqual(602L, message[f("packed_int64"), 0]);
-            Assert.AreEqual(603u, message[f("packed_uint32"), 0]);
-            Assert.AreEqual(604uL, message[f("packed_uint64"), 0]);
-            Assert.AreEqual(605, message[f("packed_sint32"), 0]);
-            Assert.AreEqual(606L, message[f("packed_sint64"), 0]);
-            Assert.AreEqual(607u, message[f("packed_fixed32"), 0]);
-            Assert.AreEqual(608uL, message[f("packed_fixed64"), 0]);
-            Assert.AreEqual(609, message[f("packed_sfixed32"), 0]);
-            Assert.AreEqual(610L, message[f("packed_sfixed64"), 0]);
-            Assert.AreEqual(611F, message[f("packed_float"), 0]);
-            Assert.AreEqual(612D, message[f("packed_double"), 0]);
-            Assert.AreEqual(true, message[f("packed_bool"), 0]);
-            Assert.AreEqual(foreignBar, message[f("packed_enum"), 0]);
-
-            Assert.AreEqual(701, message[f("packed_int32"), 1]);
-            Assert.AreEqual(702L, message[f("packed_int64"), 1]);
-            Assert.AreEqual(703u, message[f("packed_uint32"), 1]);
-            Assert.AreEqual(704uL, message[f("packed_uint64"), 1]);
-            Assert.AreEqual(705, message[f("packed_sint32"), 1]);
-            Assert.AreEqual(706L, message[f("packed_sint64"), 1]);
-            Assert.AreEqual(707u, message[f("packed_fixed32"), 1]);
-            Assert.AreEqual(708uL, message[f("packed_fixed64"), 1]);
-            Assert.AreEqual(709, message[f("packed_sfixed32"), 1]);
-            Assert.AreEqual(710L, message[f("packed_sfixed64"), 1]);
-            Assert.AreEqual(711F, message[f("packed_float"), 1]);
-            Assert.AreEqual(712D, message[f("packed_double"), 1]);
-            Assert.AreEqual(false, message[f("packed_bool"), 1]);
-            Assert.AreEqual(foreignBaz, message[f("packed_enum"), 1]);
-        }
-    }
-}

+ 50 - 0
csharp/src/ProtocolBuffers.Test/RepeatedFieldTest.cs

@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using Google.Protobuf.Collections;
+using NUnit.Framework;
+
+namespace Google.Protobuf
+{
+    public class RepeatedFieldTest
+    {
+        [Test]
+        public void NullValuesRejected()
+        {
+            var list = new RepeatedField<string>();
+            Assert.Throws<ArgumentNullException>(() => list.Add((string) null));
+            Assert.Throws<ArgumentNullException>(() => list.Add((IEnumerable<string>) null));
+            Assert.Throws<ArgumentNullException>(() => list.Add((RepeatedField<string>)null));
+            Assert.Throws<ArgumentNullException>(() => list.Contains(null));
+            Assert.Throws<ArgumentNullException>(() => list.IndexOf(null));
+        }
+
+        [Test]
+        public void Add_SingleItem()
+        {
+            var list = new RepeatedField<string>();
+            list.Add("foo");
+            Assert.AreEqual(1, list.Count);
+            Assert.AreEqual("foo", list[0]);
+        }
+
+        [Test]
+        public void Add_Sequence()
+        {
+            var list = new RepeatedField<string>();
+            list.Add(new[] { "foo", "bar" });
+            Assert.AreEqual(2, list.Count);
+            Assert.AreEqual("foo", list[0]);
+            Assert.AreEqual("bar", list[1]);
+        }
+
+        [Test]
+        public void Add_RepeatedField()
+        {
+            var list = new RepeatedField<string>();
+            list.Add(new RepeatedField<string> { "foo", "bar" });
+            Assert.AreEqual(2, list.Count);
+            Assert.AreEqual("foo", list[0]);
+            Assert.AreEqual("bar", list[1]);
+        }
+    }
+}

+ 0 - 166
csharp/src/ProtocolBuffers.Test/ReusableBuilderTest.cs

@@ -1,166 +0,0 @@
-using System;
-using Google.ProtocolBuffers.Collections;
-using Google.ProtocolBuffers.TestProtos;
-using UnitTest.Issues.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class ReusableBuilderTest
-    {
-        //Issue 28: Circular message dependencies result in null defaults for DefaultInstance
-        [Test]
-        public void EnsureStaticCicularReference()
-        {
-            MyMessageAReferenceB ab = MyMessageAReferenceB.DefaultInstance;
-            Assert.NotNull(ab);
-            Assert.NotNull(ab.Value);
-            MyMessageBReferenceA ba = MyMessageBReferenceA.DefaultInstance;
-            Assert.NotNull(ba);
-            Assert.NotNull(ba.Value);
-        }
-
-        [Test]
-        public void TestModifyDefaultInstance()
-        {
-            //verify that the default instance has correctly been marked as read-only
-            Assert.AreEqual(typeof(PopsicleList<bool>), TestAllTypes.DefaultInstance.RepeatedBoolList.GetType());
-            PopsicleList<bool> list = (PopsicleList<bool>)TestAllTypes.DefaultInstance.RepeatedBoolList;
-            Assert.IsTrue(list.IsReadOnly);
-        }
-
-        [Test]
-        public void TestUnmodifiedDefaultInstance()
-        {
-            //Simply calling ToBuilder().Build() no longer creates a copy of the message
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void BuildMultipleWithoutChange()
-        {
-            //Calling Build() or BuildPartial() does not require a copy of the message
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            builder.SetDefaultBool(true);
-
-            TestAllTypes first = builder.BuildPartial();
-            //Still the same instance?
-            Assert.IsTrue(ReferenceEquals(first, builder.Build()));
-            //Still the same instance?
-            Assert.IsTrue(ReferenceEquals(first, builder.BuildPartial().ToBuilder().Build()));
-        }
-
-        [Test]
-        public void MergeFromDefaultInstance()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            builder.MergeFrom(TestAllTypes.DefaultInstance);
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void BuildNewBuilderIsDefaultInstance()
-        {
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, new TestAllTypes.Builder().Build()));
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, TestAllTypes.CreateBuilder().Build()));
-            //last test, if you clear a builder it reverts to default instance
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance,
-                TestAllTypes.CreateBuilder().SetOptionalBool(true).Build().ToBuilder().Clear().Build()));
-        }
-
-        [Test]
-        public void BuildModifyAndRebuild()
-        {
-            TestAllTypes.Builder b1 = new TestAllTypes.Builder();
-            b1.SetDefaultInt32(1);
-            b1.AddRepeatedInt32(2);
-            b1.SetOptionalForeignMessage(ForeignMessage.DefaultInstance);
-
-            TestAllTypes m1 = b1.Build();
-
-            b1.SetDefaultInt32(5);
-            b1.AddRepeatedInt32(6);
-            b1.SetOptionalForeignMessage(b1.OptionalForeignMessage.ToBuilder().SetC(7));
-
-            TestAllTypes m2 = b1.Build();
-            
-            Assert.AreEqual("{\"optional_foreign_message\":{},\"repeated_int32\":[2],\"default_int32\":1}", Extensions.ToJson(m1));
-            Assert.AreEqual("{\"optional_foreign_message\":{\"c\":7},\"repeated_int32\":[2,6],\"default_int32\":5}", Extensions.ToJson(m2));
-        }
-
-        [Test]
-        public void CloneOnChangePrimitive()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            builder.SetDefaultBool(true);
-            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void CloneOnAddRepeatedBool()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            builder.AddRepeatedBool(true);
-            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void CloneOnGetRepeatedBoolList()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            GC.KeepAlive(builder.RepeatedBoolList);
-            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void CloneOnChangeMessage()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            builder.SetOptionalForeignMessage(new ForeignMessage.Builder());
-            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void CloneOnClearMessage()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            builder.ClearOptionalForeignMessage();
-            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void CloneOnGetRepeatedForeignMessageList()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            GC.KeepAlive(builder.RepeatedForeignMessageList);
-            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void CloneOnChangeEnumValue()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            builder.SetOptionalForeignEnum(ForeignEnum.FOREIGN_BAR);
-            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-        [Test]
-        public void CloneOnGetRepeatedForeignEnumList()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();
-            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-            GC.KeepAlive(builder.RepeatedForeignEnumList);
-            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));
-        }
-
-    }
-}

+ 9 - 13
csharp/src/ProtocolBuffers.Test/TestCornerCases.cs

@@ -1,25 +1,21 @@
 using UnitTest.Issues.TestProtos;
 using NUnit.Framework;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     public class TestCornerCases
     {
         [Test]
         public void TestRoundTripNegativeEnums()
         {
-            NegativeEnumMessage msg = NegativeEnumMessage.CreateBuilder()
-                .SetValue(NegativeEnum.MinusOne) //11
-                .AddValues(NegativeEnum.Zero) //2
-                .AddValues(NegativeEnum.MinusOne) //11
-                .AddValues(NegativeEnum.FiveBelow) //11
-                //2
-                .AddPackedValues(NegativeEnum.Zero) //1
-                .AddPackedValues(NegativeEnum.MinusOne) //10
-                .AddPackedValues(NegativeEnum.FiveBelow) //10
-                .Build();
+            NegativeEnumMessage msg = new NegativeEnumMessage
+            {
+                Value = NegativeEnum.MinusOne,
+                Values = { NegativeEnum.NEGATIVE_ENUM_ZERO, NegativeEnum.MinusOne, NegativeEnum.FiveBelow },
+                PackedValues = { NegativeEnum.NEGATIVE_ENUM_ZERO, NegativeEnum.MinusOne, NegativeEnum.FiveBelow }
+            };
 
-            Assert.AreEqual(58, msg.SerializedSize);
+            Assert.AreEqual(58, msg.CalculateSize());
 
             byte[] bytes = new byte[58];
             CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);
@@ -27,7 +23,7 @@ namespace Google.ProtocolBuffers
             msg.WriteTo(output);
             Assert.AreEqual(0, output.SpaceLeft);
 
-            NegativeEnumMessage copy = NegativeEnumMessage.ParseFrom(bytes);
+            NegativeEnumMessage copy = NegativeEnumMessage.Parser.ParseFrom(bytes);
             Assert.AreEqual(msg, copy);
         }
     }

+ 0 - 277
csharp/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs

@@ -1,277 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using Google.ProtocolBuffers.Serialization;
-using Google.ProtocolBuffers.Serialization.Http;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class TestMimeMessageFormats
-    {
-        // There is a whole host of various json mime types in use around the net, this is the set we accept...
-        readonly IEnumerable<string> JsonTypes = new string[] { "application/json", "application/x-json", "application/x-javascript", "text/javascript", "text/x-javascript", "text/x-json", "text/json" };
-        readonly IEnumerable<string> XmlTypes = new string[] { "text/xml", "application/xml" };
-        readonly IEnumerable<string> ProtobufTypes = new string[] { "application/binary", "application/x-protobuf", "application/vnd.google.protobuf" };
-
-        [Test]
-        public void TestReadJsonMimeTypes()
-        {
-            foreach (string type in JsonTypes)
-            {
-                Assert.IsTrue(
-                    MessageFormatFactory.CreateInputStream(new MessageFormatOptions(), type, Stream.Null)
-                    is JsonFormatReader);
-            }
-            Assert.IsTrue(
-                MessageFormatFactory.CreateInputStream(new MessageFormatOptions() { DefaultContentType = "application/json" }, null, Stream.Null)
-                is JsonFormatReader);
-        }
-
-        [Test]
-        public void TestWriteJsonMimeTypes()
-        {
-            foreach (string type in JsonTypes)
-            {
-                Assert.IsTrue(
-                    MessageFormatFactory.CreateOutputStream(new MessageFormatOptions(), type, Stream.Null)
-                    is JsonFormatWriter);
-            }
-            Assert.IsTrue(
-                MessageFormatFactory.CreateOutputStream(new MessageFormatOptions() { DefaultContentType = "application/json" }, null, Stream.Null)
-                is JsonFormatWriter);
-        }
-
-        [Test]
-        public void TestReadXmlMimeTypes()
-        {
-            foreach (string type in XmlTypes)
-            {
-                Assert.IsTrue(
-                    MessageFormatFactory.CreateInputStream(new MessageFormatOptions(), type, Stream.Null)
-                    is XmlFormatReader);
-            }
-            Assert.IsTrue(
-                MessageFormatFactory.CreateInputStream(new MessageFormatOptions() { DefaultContentType = "application/xml" }, null, Stream.Null)
-                is XmlFormatReader);
-        }
-
-        [Test]
-        public void TestWriteXmlMimeTypes()
-        {
-            foreach (string type in XmlTypes)
-            {
-                Assert.IsTrue(
-                    MessageFormatFactory.CreateOutputStream(new MessageFormatOptions(), type, Stream.Null)
-                    is XmlFormatWriter);
-            }
-            Assert.IsTrue(
-                MessageFormatFactory.CreateOutputStream(new MessageFormatOptions() { DefaultContentType = "application/xml" }, null, Stream.Null)
-                is XmlFormatWriter);
-        }
-
-        [Test]
-        public void TestReadProtoMimeTypes()
-        {
-            foreach (string type in ProtobufTypes)
-            {
-                Assert.IsTrue(
-                    MessageFormatFactory.CreateInputStream(new MessageFormatOptions(), type, Stream.Null)
-                    is CodedInputStream);
-            }
-            Assert.IsTrue(
-                MessageFormatFactory.CreateInputStream(new MessageFormatOptions() { DefaultContentType = "application/vnd.google.protobuf" }, null, Stream.Null)
-                is CodedInputStream);
-        }
-
-        [Test]
-        public void TestWriteProtoMimeTypes()
-        {
-            foreach (string type in ProtobufTypes)
-            {
-                Assert.IsTrue(
-                    MessageFormatFactory.CreateOutputStream(new MessageFormatOptions(), type, Stream.Null)
-                    is CodedOutputStream);
-            }
-            Assert.IsTrue(
-                MessageFormatFactory.CreateOutputStream(new MessageFormatOptions() { DefaultContentType = "application/vnd.google.protobuf" }, null, Stream.Null)
-                is CodedOutputStream);
-        }
-
-        [Test]
-        public void TestMergeFromJsonType()
-        {
-            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
-                new MessageFormatOptions(), "application/json", new MemoryStream(Encoding.UTF8.GetBytes(
-                    Extensions.ToJson(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())
-                    )))
-                .Build();
-            Assert.AreEqual("a", msg.Text);
-            Assert.AreEqual(1, msg.Number);
-        }
-
-        [Test]
-        public void TestMergeFromXmlType()
-        {
-            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
-                new MessageFormatOptions(), "application/xml", new MemoryStream(Encoding.UTF8.GetBytes(
-                    Extensions.ToXml(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())
-                    )))
-                .Build();
-            Assert.AreEqual("a", msg.Text);
-            Assert.AreEqual(1, msg.Number);
-        }
-        [Test]
-        public void TestMergeFromProtoType()
-        {
-            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
-                new MessageFormatOptions(), "application/vnd.google.protobuf", new MemoryStream(
-                    TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray()
-                    ))
-                .Build();
-            Assert.AreEqual("a", msg.Text);
-            Assert.AreEqual(1, msg.Number);
-        }
-
-        [Test]
-        public void TestWriteToJsonType()
-        {
-            MemoryStream ms = new MemoryStream();
-            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
-                new MessageFormatOptions(), "application/json", ms);
-
-            Assert.AreEqual(@"{""text"":""a"",""number"":1}", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));
-        }
-
-        [Test]
-        public void TestWriteToXmlType()
-        {
-            MemoryStream ms = new MemoryStream();
-            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
-                new MessageFormatOptions(), "application/xml", ms);
-
-            Assert.AreEqual("<root><text>a</text><number>1</number></root>", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));
-        }
-        [Test]
-        public void TestWriteToProtoType()
-        {
-            MemoryStream ms = new MemoryStream();
-            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
-                new MessageFormatOptions(), "application/vnd.google.protobuf", ms);
-
-            byte[] bytes = TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray();
-            Assert.AreEqual(bytes, ms.ToArray());
-        }
-
-        [Test]
-        public void TestXmlReaderOptions()
-        {
-            MemoryStream ms = new MemoryStream();
-            XmlFormatWriter.CreateInstance(ms)
-                .SetOptions(XmlWriterOptions.OutputNestedArrays)
-                .WriteMessage("my-root-node", TestXmlMessage.CreateBuilder().SetText("a").AddNumbers(1).AddNumbers(2).Build());
-            ms.Position = 0;
-
-            MessageFormatOptions options = new MessageFormatOptions()
-            {
-                XmlReaderOptions = XmlReaderOptions.ReadNestedArrays,
-                XmlReaderRootElementName = "my-root-node"
-            };
-
-            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
-                options, "application/xml", ms)
-                .Build();
-
-            Assert.AreEqual("a", msg.Text);
-            Assert.AreEqual(1, msg.NumbersList[0]);
-            Assert.AreEqual(2, msg.NumbersList[1]);
-
-        }
-
-        [Test]
-        public void TestXmlWriterOptions()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder().SetText("a").AddNumbers(1).AddNumbers(2).Build();
-            MessageFormatOptions options = new MessageFormatOptions()
-            {
-                XmlWriterOptions = XmlWriterOptions.OutputNestedArrays,
-                XmlWriterRootElementName = "root-node"
-            };
-
-            MemoryStream ms = new MemoryStream();
-            Extensions.WriteTo(message, options, "application/xml", ms);
-            ms.Position = 0;
-            
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            XmlFormatReader.CreateInstance(ms)
-                .SetOptions(XmlReaderOptions.ReadNestedArrays)
-                .Merge("root-node", builder);
-
-            Assert.AreEqual("a", builder.Text);
-            Assert.AreEqual(1, builder.NumbersList[0]);
-            Assert.AreEqual(2, builder.NumbersList[1]);
-        }
-
-        [Test]
-        public void TestJsonFormatted()
-        {
-            MemoryStream ms = new MemoryStream();
-            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
-                new MessageFormatOptions() { FormattedOutput = true }, "application/json", ms);
-
-            string expected = string.Format("{{{0}    \"text\": \"a\",{0}    \"number\": 1{0}}}", System.Environment.NewLine);
-            Assert.AreEqual(expected, Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));
-        }
-
-        [Test]
-        public void TestXmlFormatted()
-        {
-            MemoryStream ms = new MemoryStream();
-            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
-                new MessageFormatOptions() { FormattedOutput = true }, "application/xml", ms);
-
-            Assert.AreEqual("<root>\r\n    <text>a</text>\r\n    <number>1</number>\r\n</root>", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));
-        }
-
-        [Test]
-        public void TestReadCustomMimeTypes()
-        {
-            var options = new MessageFormatOptions();
-            //Remove existing mime-type mappings
-            options.MimeInputTypes.Clear();
-            //Add our own
-            options.MimeInputTypes.Add("-custom-XML-mime-type-", XmlFormatReader.CreateInstance);
-            Assert.AreEqual(1, options.MimeInputTypes.Count);
-
-            Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(
-                Extensions.ToXml(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())
-                ));
-
-            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),
-                options, "-custom-XML-mime-type-", xmlStream)
-                .Build();
-            Assert.AreEqual("a", msg.Text);
-            Assert.AreEqual(1, msg.Number);
-        }
-
-        [Test]
-        public void TestWriteToCustomType()
-        {
-            var options = new MessageFormatOptions();
-            //Remove existing mime-type mappings
-            options.MimeOutputTypes.Clear();
-            //Add our own
-            options.MimeOutputTypes.Add("-custom-XML-mime-type-", XmlFormatWriter.CreateInstance);
-            
-            Assert.AreEqual(1, options.MimeOutputTypes.Count);
-
-            MemoryStream ms = new MemoryStream();
-            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),
-                options, "-custom-XML-mime-type-", ms);
-
-            Assert.AreEqual("<root><text>a</text><number>1</number></root>", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));
-        }
-    }
-}

+ 0 - 4547
csharp/src/ProtocolBuffers.Test/TestProtos/GoogleSize.cs

@@ -1,4547 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google_size.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class GoogleSize {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage1__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1, global::Google.ProtocolBuffers.TestProtos.SizeMessage1.Builder> internal__static_benchmarks_SizeMessage1__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage1SubMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Builder> internal__static_benchmarks_SizeMessage1SubMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage2__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Builder> internal__static_benchmarks_SizeMessage2__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage2_Group1__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder> internal__static_benchmarks_SizeMessage2_Group1__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage2GroupedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Builder> internal__static_benchmarks_SizeMessage2GroupedMessage__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static GoogleSize() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "ChFnb29nbGVfc2l6ZS5wcm90bxIKYmVuY2htYXJrcyL2BgoMU2l6ZU1lc3Nh", 
-            "Z2UxEg4KBmZpZWxkMRgBIAIoCRIOCgZmaWVsZDkYCSABKAkSDwoHZmllbGQx", 
-            "OBgSIAEoCRIWCgdmaWVsZDgwGFAgASgIOgVmYWxzZRIVCgdmaWVsZDgxGFEg", 
-            "ASgIOgR0cnVlEg4KBmZpZWxkMhgCIAIoBRIOCgZmaWVsZDMYAyACKAUSEQoI", 
-            "ZmllbGQyODAYmAIgASgFEhEKBmZpZWxkNhgGIAEoBToBMBIPCgdmaWVsZDIy", 
-            "GBYgASgDEg4KBmZpZWxkNBgEIAEoCRIOCgZmaWVsZDUYBSADKAYSFgoHZmll", 
-            "bGQ1ORg7IAEoCDoFZmFsc2USDgoGZmllbGQ3GAcgASgJEg8KB2ZpZWxkMTYY", 
-            "ECABKAUSFAoIZmllbGQxMzAYggEgASgFOgEwEhUKB2ZpZWxkMTIYDCABKAg6", 
-            "BHRydWUSFQoHZmllbGQxNxgRIAEoCDoEdHJ1ZRIVCgdmaWVsZDEzGA0gASgI", 
-            "OgR0cnVlEhUKB2ZpZWxkMTQYDiABKAg6BHRydWUSEwoIZmllbGQxMDQYaCAB", 
-            "KAU6ATASEwoIZmllbGQxMDAYZCABKAU6ATASEwoIZmllbGQxMDEYZSABKAU6", 
-            "ATASEAoIZmllbGQxMDIYZiABKAkSEAoIZmllbGQxMDMYZyABKAkSEgoHZmll", 
-            "bGQyORgdIAEoBToBMBIWCgdmaWVsZDMwGB4gASgIOgVmYWxzZRITCgdmaWVs", 
-            "ZDYwGDwgASgFOgItMRIVCghmaWVsZDI3MRiPAiABKAU6Ai0xEhUKCGZpZWxk", 
-            "MjcyGJACIAEoBToCLTESEQoIZmllbGQxNTAYlgEgASgFEhIKB2ZpZWxkMjMY", 
-            "FyABKAU6ATASFgoHZmllbGQyNBgYIAEoCDoFZmFsc2USEgoHZmllbGQyNRgZ", 
-            "IAEoBToBMBIzCgdmaWVsZDE1GA8gASgLMiIuYmVuY2htYXJrcy5TaXplTWVz", 
-            "c2FnZTFTdWJNZXNzYWdlEg8KB2ZpZWxkNzgYTiABKAgSEgoHZmllbGQ2NxhD", 
-            "IAEoBToBMBIPCgdmaWVsZDY4GEQgASgFEhQKCGZpZWxkMTI4GIABIAEoBToB", 
-            "MBIoCghmaWVsZDEyORiBASABKAk6FXh4eHh4eHh4eHh4eHh4eHh4eHh4eBIU", 
-            "CghmaWVsZDEzMRiDASABKAU6ATAioQMKFlNpemVNZXNzYWdlMVN1Yk1lc3Nh", 
-            "Z2USEQoGZmllbGQxGAEgASgFOgEwEhEKBmZpZWxkMhgCIAEoBToBMBIRCgZm", 
-            "aWVsZDMYAyABKAU6ATASDwoHZmllbGQxNRgPIAEoCRIVCgdmaWVsZDEyGAwg", 
-            "ASgIOgR0cnVlEg8KB2ZpZWxkMTMYDSABKAMSDwoHZmllbGQxNBgOIAEoAxIP", 
-            "CgdmaWVsZDE2GBAgASgFEhIKB2ZpZWxkMTkYEyABKAU6ATISFQoHZmllbGQy", 
-            "MBgUIAEoCDoEdHJ1ZRIVCgdmaWVsZDI4GBwgASgIOgR0cnVlEg8KB2ZpZWxk", 
-            "MjEYFSABKAYSDwoHZmllbGQyMhgWIAEoBRIWCgdmaWVsZDIzGBcgASgIOgVm", 
-            "YWxzZRIYCghmaWVsZDIwNhjOASABKAg6BWZhbHNlEhEKCGZpZWxkMjAzGMsB", 
-            "IAEoBxIRCghmaWVsZDIwNBjMASABKAUSEQoIZmllbGQyMDUYzQEgASgJEhEK", 
-            "CGZpZWxkMjA3GM8BIAEoBBIRCghmaWVsZDMwMBisAiABKAQixwcKDFNpemVN", 
-            "ZXNzYWdlMhIOCgZmaWVsZDEYASABKAkSDgoGZmllbGQzGAMgASgDEg4KBmZp", 
-            "ZWxkNBgEIAEoAxIPCgdmaWVsZDMwGB4gASgDEhYKB2ZpZWxkNzUYSyABKAg6", 
-            "BWZhbHNlEg4KBmZpZWxkNhgGIAEoCRIOCgZmaWVsZDIYAiABKAwSEgoHZmll", 
-            "bGQyMRgVIAEoBToBMBIPCgdmaWVsZDcxGEcgASgFEg8KB2ZpZWxkMjUYGSAB", 
-            "KAISEwoIZmllbGQxMDkYbSABKAU6ATASFAoIZmllbGQyMTAY0gEgASgFOgEw", 
-            "EhQKCGZpZWxkMjExGNMBIAEoBToBMBIUCghmaWVsZDIxMhjUASABKAU6ATAS", 
-            "FAoIZmllbGQyMTMY1QEgASgFOgEwEhQKCGZpZWxkMjE2GNgBIAEoBToBMBIU", 
-            "CghmaWVsZDIxNxjZASABKAU6ATASFAoIZmllbGQyMTgY2gEgASgFOgEwEhQK", 
-            "CGZpZWxkMjIwGNwBIAEoBToBMBIUCghmaWVsZDIyMRjdASABKAU6ATASFAoI", 
-            "ZmllbGQyMjIY3gEgASgCOgEwEg8KB2ZpZWxkNjMYPyABKAUSLwoGZ3JvdXAx", 
-            "GAogAygKMh8uYmVuY2htYXJrcy5TaXplTWVzc2FnZTIuR3JvdXAxEhEKCGZp", 
-            "ZWxkMTI4GIABIAMoCRIRCghmaWVsZDEzMRiDASABKAMSEAoIZmllbGQxMjcY", 
-            "fyADKAkSEQoIZmllbGQxMjkYgQEgASgFEhEKCGZpZWxkMTMwGIIBIAMoAxIY", 
-            "CghmaWVsZDIwNRjNASABKAg6BWZhbHNlEhgKCGZpZWxkMjA2GM4BIAEoCDoF", 
-            "ZmFsc2UawgIKBkdyb3VwMRIPCgdmaWVsZDExGAsgAigCEg8KB2ZpZWxkMjYY", 
-            "GiABKAISDwoHZmllbGQxMhgMIAEoCRIPCgdmaWVsZDEzGA0gASgJEg8KB2Zp", 
-            "ZWxkMTQYDiADKAkSDwoHZmllbGQxNRgPIAIoBBIOCgZmaWVsZDUYBSABKAUS", 
-            "DwoHZmllbGQyNxgbIAEoCRIPCgdmaWVsZDI4GBwgASgFEg8KB2ZpZWxkMjkY", 
-            "HSABKAkSDwoHZmllbGQxNhgQIAEoCRIPCgdmaWVsZDIyGBYgAygJEg8KB2Zp", 
-            "ZWxkNzMYSSADKAUSEgoHZmllbGQyMBgUIAEoBToBMBIPCgdmaWVsZDI0GBgg", 
-            "ASgJEjcKB2ZpZWxkMzEYHyABKAsyJi5iZW5jaG1hcmtzLlNpemVNZXNzYWdl", 
-            "Mkdyb3VwZWRNZXNzYWdlIt4BChpTaXplTWVzc2FnZTJHcm91cGVkTWVzc2Fn", 
-            "ZRIOCgZmaWVsZDEYASABKAISDgoGZmllbGQyGAIgASgCEhEKBmZpZWxkMxgD", 
-            "IAEoAjoBMBIOCgZmaWVsZDQYBCABKAgSDgoGZmllbGQ1GAUgASgIEhQKBmZp", 
-            "ZWxkNhgGIAEoCDoEdHJ1ZRIVCgZmaWVsZDcYByABKAg6BWZhbHNlEg4KBmZp", 
-            "ZWxkOBgIIAEoAhIOCgZmaWVsZDkYCSABKAgSDwoHZmllbGQxMBgKIAEoAhIP", 
-            "CgdmaWVsZDExGAsgASgDQjJCCkdvb2dsZVNpemVIAqoCIUdvb2dsZS5Qcm90", 
-          "b2NvbEJ1ZmZlcnMuVGVzdFByb3Rvcw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_benchmarks_SizeMessage1__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_benchmarks_SizeMessage1__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1, global::Google.ProtocolBuffers.TestProtos.SizeMessage1.Builder>(internal__static_benchmarks_SizeMessage1__Descriptor,
-                new string[] { "Field1", "Field9", "Field18", "Field80", "Field81", "Field2", "Field3", "Field280", "Field6", "Field22", "Field4", "Field5", "Field59", "Field7", "Field16", "Field130", "Field12", "Field17", "Field13", "Field14", "Field104", "Field100", "Field101", "Field102", "Field103", "Field29", "Field30", "Field60", "Field271", "Field272", "Field150", "Field23", "Field24", "Field25", "Field15", "Field78", "Field67", "Field68", "Field128", "Field129", "Field131", });
-        internal__static_benchmarks_SizeMessage1SubMessage__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_benchmarks_SizeMessage1SubMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Builder>(internal__static_benchmarks_SizeMessage1SubMessage__Descriptor,
-                new string[] { "Field1", "Field2", "Field3", "Field15", "Field12", "Field13", "Field14", "Field16", "Field19", "Field20", "Field28", "Field21", "Field22", "Field23", "Field206", "Field203", "Field204", "Field205", "Field207", "Field300", });
-        internal__static_benchmarks_SizeMessage2__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_benchmarks_SizeMessage2__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Builder>(internal__static_benchmarks_SizeMessage2__Descriptor,
-                new string[] { "Field1", "Field3", "Field4", "Field30", "Field75", "Field6", "Field2", "Field21", "Field71", "Field25", "Field109", "Field210", "Field211", "Field212", "Field213", "Field216", "Field217", "Field218", "Field220", "Field221", "Field222", "Field63", "Group1", "Field128", "Field131", "Field127", "Field129", "Field130", "Field205", "Field206", });
-        internal__static_benchmarks_SizeMessage2_Group1__Descriptor = internal__static_benchmarks_SizeMessage2__Descriptor.NestedTypes[0];
-        internal__static_benchmarks_SizeMessage2_Group1__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder>(internal__static_benchmarks_SizeMessage2_Group1__Descriptor,
-                new string[] { "Field11", "Field26", "Field12", "Field13", "Field14", "Field15", "Field5", "Field27", "Field28", "Field29", "Field16", "Field22", "Field73", "Field20", "Field24", "Field31", });
-        internal__static_benchmarks_SizeMessage2GroupedMessage__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_benchmarks_SizeMessage2GroupedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Builder>(internal__static_benchmarks_SizeMessage2GroupedMessage__Descriptor,
-                new string[] { "Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8", "Field9", "Field10", "Field11", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SizeMessage1 : pb::GeneratedMessage<SizeMessage1, SizeMessage1.Builder> {
-    private SizeMessage1() { }
-    private static readonly SizeMessage1 defaultInstance = new SizeMessage1().MakeReadOnly();
-    public static SizeMessage1 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SizeMessage1 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SizeMessage1 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage1__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage1, SizeMessage1.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage1__FieldAccessorTable; }
-    }
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private string field1_ = "";
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public string Field1 {
-      get { return field1_; }
-    }
-
-    public const int Field9FieldNumber = 9;
-    private bool hasField9;
-    private string field9_ = "";
-    public bool HasField9 {
-      get { return hasField9; }
-    }
-    public string Field9 {
-      get { return field9_; }
-    }
-
-    public const int Field18FieldNumber = 18;
-    private bool hasField18;
-    private string field18_ = "";
-    public bool HasField18 {
-      get { return hasField18; }
-    }
-    public string Field18 {
-      get { return field18_; }
-    }
-
-    public const int Field80FieldNumber = 80;
-    private bool hasField80;
-    private bool field80_;
-    public bool HasField80 {
-      get { return hasField80; }
-    }
-    public bool Field80 {
-      get { return field80_; }
-    }
-
-    public const int Field81FieldNumber = 81;
-    private bool hasField81;
-    private bool field81_ = true;
-    public bool HasField81 {
-      get { return hasField81; }
-    }
-    public bool Field81 {
-      get { return field81_; }
-    }
-
-    public const int Field2FieldNumber = 2;
-    private bool hasField2;
-    private int field2_;
-    public bool HasField2 {
-      get { return hasField2; }
-    }
-    public int Field2 {
-      get { return field2_; }
-    }
-
-    public const int Field3FieldNumber = 3;
-    private bool hasField3;
-    private int field3_;
-    public bool HasField3 {
-      get { return hasField3; }
-    }
-    public int Field3 {
-      get { return field3_; }
-    }
-
-    public const int Field280FieldNumber = 280;
-    private bool hasField280;
-    private int field280_;
-    public bool HasField280 {
-      get { return hasField280; }
-    }
-    public int Field280 {
-      get { return field280_; }
-    }
-
-    public const int Field6FieldNumber = 6;
-    private bool hasField6;
-    private int field6_;
-    public bool HasField6 {
-      get { return hasField6; }
-    }
-    public int Field6 {
-      get { return field6_; }
-    }
-
-    public const int Field22FieldNumber = 22;
-    private bool hasField22;
-    private long field22_;
-    public bool HasField22 {
-      get { return hasField22; }
-    }
-    public long Field22 {
-      get { return field22_; }
-    }
-
-    public const int Field4FieldNumber = 4;
-    private bool hasField4;
-    private string field4_ = "";
-    public bool HasField4 {
-      get { return hasField4; }
-    }
-    public string Field4 {
-      get { return field4_; }
-    }
-
-    public const int Field5FieldNumber = 5;
-    private pbc::PopsicleList<ulong> field5_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> Field5List {
-      get { return pbc::Lists.AsReadOnly(field5_); }
-    }
-    public int Field5Count {
-      get { return field5_.Count; }
-    }
-    public ulong GetField5(int index) {
-      return field5_[index];
-    }
-
-    public const int Field59FieldNumber = 59;
-    private bool hasField59;
-    private bool field59_;
-    public bool HasField59 {
-      get { return hasField59; }
-    }
-    public bool Field59 {
-      get { return field59_; }
-    }
-
-    public const int Field7FieldNumber = 7;
-    private bool hasField7;
-    private string field7_ = "";
-    public bool HasField7 {
-      get { return hasField7; }
-    }
-    public string Field7 {
-      get { return field7_; }
-    }
-
-    public const int Field16FieldNumber = 16;
-    private bool hasField16;
-    private int field16_;
-    public bool HasField16 {
-      get { return hasField16; }
-    }
-    public int Field16 {
-      get { return field16_; }
-    }
-
-    public const int Field130FieldNumber = 130;
-    private bool hasField130;
-    private int field130_;
-    public bool HasField130 {
-      get { return hasField130; }
-    }
-    public int Field130 {
-      get { return field130_; }
-    }
-
-    public const int Field12FieldNumber = 12;
-    private bool hasField12;
-    private bool field12_ = true;
-    public bool HasField12 {
-      get { return hasField12; }
-    }
-    public bool Field12 {
-      get { return field12_; }
-    }
-
-    public const int Field17FieldNumber = 17;
-    private bool hasField17;
-    private bool field17_ = true;
-    public bool HasField17 {
-      get { return hasField17; }
-    }
-    public bool Field17 {
-      get { return field17_; }
-    }
-
-    public const int Field13FieldNumber = 13;
-    private bool hasField13;
-    private bool field13_ = true;
-    public bool HasField13 {
-      get { return hasField13; }
-    }
-    public bool Field13 {
-      get { return field13_; }
-    }
-
-    public const int Field14FieldNumber = 14;
-    private bool hasField14;
-    private bool field14_ = true;
-    public bool HasField14 {
-      get { return hasField14; }
-    }
-    public bool Field14 {
-      get { return field14_; }
-    }
-
-    public const int Field104FieldNumber = 104;
-    private bool hasField104;
-    private int field104_;
-    public bool HasField104 {
-      get { return hasField104; }
-    }
-    public int Field104 {
-      get { return field104_; }
-    }
-
-    public const int Field100FieldNumber = 100;
-    private bool hasField100;
-    private int field100_;
-    public bool HasField100 {
-      get { return hasField100; }
-    }
-    public int Field100 {
-      get { return field100_; }
-    }
-
-    public const int Field101FieldNumber = 101;
-    private bool hasField101;
-    private int field101_;
-    public bool HasField101 {
-      get { return hasField101; }
-    }
-    public int Field101 {
-      get { return field101_; }
-    }
-
-    public const int Field102FieldNumber = 102;
-    private bool hasField102;
-    private string field102_ = "";
-    public bool HasField102 {
-      get { return hasField102; }
-    }
-    public string Field102 {
-      get { return field102_; }
-    }
-
-    public const int Field103FieldNumber = 103;
-    private bool hasField103;
-    private string field103_ = "";
-    public bool HasField103 {
-      get { return hasField103; }
-    }
-    public string Field103 {
-      get { return field103_; }
-    }
-
-    public const int Field29FieldNumber = 29;
-    private bool hasField29;
-    private int field29_;
-    public bool HasField29 {
-      get { return hasField29; }
-    }
-    public int Field29 {
-      get { return field29_; }
-    }
-
-    public const int Field30FieldNumber = 30;
-    private bool hasField30;
-    private bool field30_;
-    public bool HasField30 {
-      get { return hasField30; }
-    }
-    public bool Field30 {
-      get { return field30_; }
-    }
-
-    public const int Field60FieldNumber = 60;
-    private bool hasField60;
-    private int field60_ = -1;
-    public bool HasField60 {
-      get { return hasField60; }
-    }
-    public int Field60 {
-      get { return field60_; }
-    }
-
-    public const int Field271FieldNumber = 271;
-    private bool hasField271;
-    private int field271_ = -1;
-    public bool HasField271 {
-      get { return hasField271; }
-    }
-    public int Field271 {
-      get { return field271_; }
-    }
-
-    public const int Field272FieldNumber = 272;
-    private bool hasField272;
-    private int field272_ = -1;
-    public bool HasField272 {
-      get { return hasField272; }
-    }
-    public int Field272 {
-      get { return field272_; }
-    }
-
-    public const int Field150FieldNumber = 150;
-    private bool hasField150;
-    private int field150_;
-    public bool HasField150 {
-      get { return hasField150; }
-    }
-    public int Field150 {
-      get { return field150_; }
-    }
-
-    public const int Field23FieldNumber = 23;
-    private bool hasField23;
-    private int field23_;
-    public bool HasField23 {
-      get { return hasField23; }
-    }
-    public int Field23 {
-      get { return field23_; }
-    }
-
-    public const int Field24FieldNumber = 24;
-    private bool hasField24;
-    private bool field24_;
-    public bool HasField24 {
-      get { return hasField24; }
-    }
-    public bool Field24 {
-      get { return field24_; }
-    }
-
-    public const int Field25FieldNumber = 25;
-    private bool hasField25;
-    private int field25_;
-    public bool HasField25 {
-      get { return hasField25; }
-    }
-    public int Field25 {
-      get { return field25_; }
-    }
-
-    public const int Field15FieldNumber = 15;
-    private bool hasField15;
-    private global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage field15_;
-    public bool HasField15 {
-      get { return hasField15; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage Field15 {
-      get { return field15_ ?? global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.DefaultInstance; }
-    }
-
-    public const int Field78FieldNumber = 78;
-    private bool hasField78;
-    private bool field78_;
-    public bool HasField78 {
-      get { return hasField78; }
-    }
-    public bool Field78 {
-      get { return field78_; }
-    }
-
-    public const int Field67FieldNumber = 67;
-    private bool hasField67;
-    private int field67_;
-    public bool HasField67 {
-      get { return hasField67; }
-    }
-    public int Field67 {
-      get { return field67_; }
-    }
-
-    public const int Field68FieldNumber = 68;
-    private bool hasField68;
-    private int field68_;
-    public bool HasField68 {
-      get { return hasField68; }
-    }
-    public int Field68 {
-      get { return field68_; }
-    }
-
-    public const int Field128FieldNumber = 128;
-    private bool hasField128;
-    private int field128_;
-    public bool HasField128 {
-      get { return hasField128; }
-    }
-    public int Field128 {
-      get { return field128_; }
-    }
-
-    public const int Field129FieldNumber = 129;
-    private bool hasField129;
-    private string field129_ = "xxxxxxxxxxxxxxxxxxxxx";
-    public bool HasField129 {
-      get { return hasField129; }
-    }
-    public string Field129 {
-      get { return field129_; }
-    }
-
-    public const int Field131FieldNumber = 131;
-    private bool hasField131;
-    private int field131_;
-    public bool HasField131 {
-      get { return hasField131; }
-    }
-    public int Field131 {
-      get { return field131_; }
-    }
-
-    public static SizeMessage1 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SizeMessage1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage1 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SizeMessage1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage1 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SizeMessage1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage1 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SizeMessage1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SizeMessage1 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SizeMessage1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SizeMessage1 MakeReadOnly() {
-      field5_.MakeReadOnly();
-      return this;
-    }
-
-    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(SizeMessage1 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage1, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SizeMessage1 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SizeMessage1 result;
-
-      private SizeMessage1 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SizeMessage1 original = result;
-          result = new SizeMessage1();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SizeMessage1 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage1.Descriptor; }
-      }
-
-      public override SizeMessage1 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage1.DefaultInstance; }
-      }
-
-      public override SizeMessage1 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public string Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = "";
-        return this;
-      }
-
-      public bool HasField9 {
-        get { return result.hasField9; }
-      }
-      public string Field9 {
-        get { return result.Field9; }
-        set { SetField9(value); }
-      }
-      public Builder SetField9(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField9 = true;
-        result.field9_ = value;
-        return this;
-      }
-      public Builder ClearField9() {
-        PrepareBuilder();
-        result.hasField9 = false;
-        result.field9_ = "";
-        return this;
-      }
-
-      public bool HasField18 {
-        get { return result.hasField18; }
-      }
-      public string Field18 {
-        get { return result.Field18; }
-        set { SetField18(value); }
-      }
-      public Builder SetField18(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField18 = true;
-        result.field18_ = value;
-        return this;
-      }
-      public Builder ClearField18() {
-        PrepareBuilder();
-        result.hasField18 = false;
-        result.field18_ = "";
-        return this;
-      }
-
-      public bool HasField80 {
-        get { return result.hasField80; }
-      }
-      public bool Field80 {
-        get { return result.Field80; }
-        set { SetField80(value); }
-      }
-      public Builder SetField80(bool value) {
-        PrepareBuilder();
-        result.hasField80 = true;
-        result.field80_ = value;
-        return this;
-      }
-      public Builder ClearField80() {
-        PrepareBuilder();
-        result.hasField80 = false;
-        result.field80_ = false;
-        return this;
-      }
-
-      public bool HasField81 {
-        get { return result.hasField81; }
-      }
-      public bool Field81 {
-        get { return result.Field81; }
-        set { SetField81(value); }
-      }
-      public Builder SetField81(bool value) {
-        PrepareBuilder();
-        result.hasField81 = true;
-        result.field81_ = value;
-        return this;
-      }
-      public Builder ClearField81() {
-        PrepareBuilder();
-        result.hasField81 = false;
-        result.field81_ = true;
-        return this;
-      }
-
-      public bool HasField2 {
-        get { return result.hasField2; }
-      }
-      public int Field2 {
-        get { return result.Field2; }
-        set { SetField2(value); }
-      }
-      public Builder SetField2(int value) {
-        PrepareBuilder();
-        result.hasField2 = true;
-        result.field2_ = value;
-        return this;
-      }
-      public Builder ClearField2() {
-        PrepareBuilder();
-        result.hasField2 = false;
-        result.field2_ = 0;
-        return this;
-      }
-
-      public bool HasField3 {
-        get { return result.hasField3; }
-      }
-      public int Field3 {
-        get { return result.Field3; }
-        set { SetField3(value); }
-      }
-      public Builder SetField3(int value) {
-        PrepareBuilder();
-        result.hasField3 = true;
-        result.field3_ = value;
-        return this;
-      }
-      public Builder ClearField3() {
-        PrepareBuilder();
-        result.hasField3 = false;
-        result.field3_ = 0;
-        return this;
-      }
-
-      public bool HasField280 {
-        get { return result.hasField280; }
-      }
-      public int Field280 {
-        get { return result.Field280; }
-        set { SetField280(value); }
-      }
-      public Builder SetField280(int value) {
-        PrepareBuilder();
-        result.hasField280 = true;
-        result.field280_ = value;
-        return this;
-      }
-      public Builder ClearField280() {
-        PrepareBuilder();
-        result.hasField280 = false;
-        result.field280_ = 0;
-        return this;
-      }
-
-      public bool HasField6 {
-        get { return result.hasField6; }
-      }
-      public int Field6 {
-        get { return result.Field6; }
-        set { SetField6(value); }
-      }
-      public Builder SetField6(int value) {
-        PrepareBuilder();
-        result.hasField6 = true;
-        result.field6_ = value;
-        return this;
-      }
-      public Builder ClearField6() {
-        PrepareBuilder();
-        result.hasField6 = false;
-        result.field6_ = 0;
-        return this;
-      }
-
-      public bool HasField22 {
-        get { return result.hasField22; }
-      }
-      public long Field22 {
-        get { return result.Field22; }
-        set { SetField22(value); }
-      }
-      public Builder SetField22(long value) {
-        PrepareBuilder();
-        result.hasField22 = true;
-        result.field22_ = value;
-        return this;
-      }
-      public Builder ClearField22() {
-        PrepareBuilder();
-        result.hasField22 = false;
-        result.field22_ = 0L;
-        return this;
-      }
-
-      public bool HasField4 {
-        get { return result.hasField4; }
-      }
-      public string Field4 {
-        get { return result.Field4; }
-        set { SetField4(value); }
-      }
-      public Builder SetField4(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField4 = true;
-        result.field4_ = value;
-        return this;
-      }
-      public Builder ClearField4() {
-        PrepareBuilder();
-        result.hasField4 = false;
-        result.field4_ = "";
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> Field5List {
-        get { return PrepareBuilder().field5_; }
-      }
-      public int Field5Count {
-        get { return result.Field5Count; }
-      }
-      public ulong GetField5(int index) {
-        return result.GetField5(index);
-      }
-      public Builder SetField5(int index, ulong value) {
-        PrepareBuilder();
-        result.field5_[index] = value;
-        return this;
-      }
-      public Builder AddField5(ulong value) {
-        PrepareBuilder();
-        result.field5_.Add(value);
-        return this;
-      }
-      public Builder AddRangeField5(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.field5_.Add(values);
-        return this;
-      }
-      public Builder ClearField5() {
-        PrepareBuilder();
-        result.field5_.Clear();
-        return this;
-      }
-
-      public bool HasField59 {
-        get { return result.hasField59; }
-      }
-      public bool Field59 {
-        get { return result.Field59; }
-        set { SetField59(value); }
-      }
-      public Builder SetField59(bool value) {
-        PrepareBuilder();
-        result.hasField59 = true;
-        result.field59_ = value;
-        return this;
-      }
-      public Builder ClearField59() {
-        PrepareBuilder();
-        result.hasField59 = false;
-        result.field59_ = false;
-        return this;
-      }
-
-      public bool HasField7 {
-        get { return result.hasField7; }
-      }
-      public string Field7 {
-        get { return result.Field7; }
-        set { SetField7(value); }
-      }
-      public Builder SetField7(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField7 = true;
-        result.field7_ = value;
-        return this;
-      }
-      public Builder ClearField7() {
-        PrepareBuilder();
-        result.hasField7 = false;
-        result.field7_ = "";
-        return this;
-      }
-
-      public bool HasField16 {
-        get { return result.hasField16; }
-      }
-      public int Field16 {
-        get { return result.Field16; }
-        set { SetField16(value); }
-      }
-      public Builder SetField16(int value) {
-        PrepareBuilder();
-        result.hasField16 = true;
-        result.field16_ = value;
-        return this;
-      }
-      public Builder ClearField16() {
-        PrepareBuilder();
-        result.hasField16 = false;
-        result.field16_ = 0;
-        return this;
-      }
-
-      public bool HasField130 {
-        get { return result.hasField130; }
-      }
-      public int Field130 {
-        get { return result.Field130; }
-        set { SetField130(value); }
-      }
-      public Builder SetField130(int value) {
-        PrepareBuilder();
-        result.hasField130 = true;
-        result.field130_ = value;
-        return this;
-      }
-      public Builder ClearField130() {
-        PrepareBuilder();
-        result.hasField130 = false;
-        result.field130_ = 0;
-        return this;
-      }
-
-      public bool HasField12 {
-        get { return result.hasField12; }
-      }
-      public bool Field12 {
-        get { return result.Field12; }
-        set { SetField12(value); }
-      }
-      public Builder SetField12(bool value) {
-        PrepareBuilder();
-        result.hasField12 = true;
-        result.field12_ = value;
-        return this;
-      }
-      public Builder ClearField12() {
-        PrepareBuilder();
-        result.hasField12 = false;
-        result.field12_ = true;
-        return this;
-      }
-
-      public bool HasField17 {
-        get { return result.hasField17; }
-      }
-      public bool Field17 {
-        get { return result.Field17; }
-        set { SetField17(value); }
-      }
-      public Builder SetField17(bool value) {
-        PrepareBuilder();
-        result.hasField17 = true;
-        result.field17_ = value;
-        return this;
-      }
-      public Builder ClearField17() {
-        PrepareBuilder();
-        result.hasField17 = false;
-        result.field17_ = true;
-        return this;
-      }
-
-      public bool HasField13 {
-        get { return result.hasField13; }
-      }
-      public bool Field13 {
-        get { return result.Field13; }
-        set { SetField13(value); }
-      }
-      public Builder SetField13(bool value) {
-        PrepareBuilder();
-        result.hasField13 = true;
-        result.field13_ = value;
-        return this;
-      }
-      public Builder ClearField13() {
-        PrepareBuilder();
-        result.hasField13 = false;
-        result.field13_ = true;
-        return this;
-      }
-
-      public bool HasField14 {
-        get { return result.hasField14; }
-      }
-      public bool Field14 {
-        get { return result.Field14; }
-        set { SetField14(value); }
-      }
-      public Builder SetField14(bool value) {
-        PrepareBuilder();
-        result.hasField14 = true;
-        result.field14_ = value;
-        return this;
-      }
-      public Builder ClearField14() {
-        PrepareBuilder();
-        result.hasField14 = false;
-        result.field14_ = true;
-        return this;
-      }
-
-      public bool HasField104 {
-        get { return result.hasField104; }
-      }
-      public int Field104 {
-        get { return result.Field104; }
-        set { SetField104(value); }
-      }
-      public Builder SetField104(int value) {
-        PrepareBuilder();
-        result.hasField104 = true;
-        result.field104_ = value;
-        return this;
-      }
-      public Builder ClearField104() {
-        PrepareBuilder();
-        result.hasField104 = false;
-        result.field104_ = 0;
-        return this;
-      }
-
-      public bool HasField100 {
-        get { return result.hasField100; }
-      }
-      public int Field100 {
-        get { return result.Field100; }
-        set { SetField100(value); }
-      }
-      public Builder SetField100(int value) {
-        PrepareBuilder();
-        result.hasField100 = true;
-        result.field100_ = value;
-        return this;
-      }
-      public Builder ClearField100() {
-        PrepareBuilder();
-        result.hasField100 = false;
-        result.field100_ = 0;
-        return this;
-      }
-
-      public bool HasField101 {
-        get { return result.hasField101; }
-      }
-      public int Field101 {
-        get { return result.Field101; }
-        set { SetField101(value); }
-      }
-      public Builder SetField101(int value) {
-        PrepareBuilder();
-        result.hasField101 = true;
-        result.field101_ = value;
-        return this;
-      }
-      public Builder ClearField101() {
-        PrepareBuilder();
-        result.hasField101 = false;
-        result.field101_ = 0;
-        return this;
-      }
-
-      public bool HasField102 {
-        get { return result.hasField102; }
-      }
-      public string Field102 {
-        get { return result.Field102; }
-        set { SetField102(value); }
-      }
-      public Builder SetField102(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField102 = true;
-        result.field102_ = value;
-        return this;
-      }
-      public Builder ClearField102() {
-        PrepareBuilder();
-        result.hasField102 = false;
-        result.field102_ = "";
-        return this;
-      }
-
-      public bool HasField103 {
-        get { return result.hasField103; }
-      }
-      public string Field103 {
-        get { return result.Field103; }
-        set { SetField103(value); }
-      }
-      public Builder SetField103(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField103 = true;
-        result.field103_ = value;
-        return this;
-      }
-      public Builder ClearField103() {
-        PrepareBuilder();
-        result.hasField103 = false;
-        result.field103_ = "";
-        return this;
-      }
-
-      public bool HasField29 {
-        get { return result.hasField29; }
-      }
-      public int Field29 {
-        get { return result.Field29; }
-        set { SetField29(value); }
-      }
-      public Builder SetField29(int value) {
-        PrepareBuilder();
-        result.hasField29 = true;
-        result.field29_ = value;
-        return this;
-      }
-      public Builder ClearField29() {
-        PrepareBuilder();
-        result.hasField29 = false;
-        result.field29_ = 0;
-        return this;
-      }
-
-      public bool HasField30 {
-        get { return result.hasField30; }
-      }
-      public bool Field30 {
-        get { return result.Field30; }
-        set { SetField30(value); }
-      }
-      public Builder SetField30(bool value) {
-        PrepareBuilder();
-        result.hasField30 = true;
-        result.field30_ = value;
-        return this;
-      }
-      public Builder ClearField30() {
-        PrepareBuilder();
-        result.hasField30 = false;
-        result.field30_ = false;
-        return this;
-      }
-
-      public bool HasField60 {
-        get { return result.hasField60; }
-      }
-      public int Field60 {
-        get { return result.Field60; }
-        set { SetField60(value); }
-      }
-      public Builder SetField60(int value) {
-        PrepareBuilder();
-        result.hasField60 = true;
-        result.field60_ = value;
-        return this;
-      }
-      public Builder ClearField60() {
-        PrepareBuilder();
-        result.hasField60 = false;
-        result.field60_ = -1;
-        return this;
-      }
-
-      public bool HasField271 {
-        get { return result.hasField271; }
-      }
-      public int Field271 {
-        get { return result.Field271; }
-        set { SetField271(value); }
-      }
-      public Builder SetField271(int value) {
-        PrepareBuilder();
-        result.hasField271 = true;
-        result.field271_ = value;
-        return this;
-      }
-      public Builder ClearField271() {
-        PrepareBuilder();
-        result.hasField271 = false;
-        result.field271_ = -1;
-        return this;
-      }
-
-      public bool HasField272 {
-        get { return result.hasField272; }
-      }
-      public int Field272 {
-        get { return result.Field272; }
-        set { SetField272(value); }
-      }
-      public Builder SetField272(int value) {
-        PrepareBuilder();
-        result.hasField272 = true;
-        result.field272_ = value;
-        return this;
-      }
-      public Builder ClearField272() {
-        PrepareBuilder();
-        result.hasField272 = false;
-        result.field272_ = -1;
-        return this;
-      }
-
-      public bool HasField150 {
-        get { return result.hasField150; }
-      }
-      public int Field150 {
-        get { return result.Field150; }
-        set { SetField150(value); }
-      }
-      public Builder SetField150(int value) {
-        PrepareBuilder();
-        result.hasField150 = true;
-        result.field150_ = value;
-        return this;
-      }
-      public Builder ClearField150() {
-        PrepareBuilder();
-        result.hasField150 = false;
-        result.field150_ = 0;
-        return this;
-      }
-
-      public bool HasField23 {
-        get { return result.hasField23; }
-      }
-      public int Field23 {
-        get { return result.Field23; }
-        set { SetField23(value); }
-      }
-      public Builder SetField23(int value) {
-        PrepareBuilder();
-        result.hasField23 = true;
-        result.field23_ = value;
-        return this;
-      }
-      public Builder ClearField23() {
-        PrepareBuilder();
-        result.hasField23 = false;
-        result.field23_ = 0;
-        return this;
-      }
-
-      public bool HasField24 {
-        get { return result.hasField24; }
-      }
-      public bool Field24 {
-        get { return result.Field24; }
-        set { SetField24(value); }
-      }
-      public Builder SetField24(bool value) {
-        PrepareBuilder();
-        result.hasField24 = true;
-        result.field24_ = value;
-        return this;
-      }
-      public Builder ClearField24() {
-        PrepareBuilder();
-        result.hasField24 = false;
-        result.field24_ = false;
-        return this;
-      }
-
-      public bool HasField25 {
-        get { return result.hasField25; }
-      }
-      public int Field25 {
-        get { return result.Field25; }
-        set { SetField25(value); }
-      }
-      public Builder SetField25(int value) {
-        PrepareBuilder();
-        result.hasField25 = true;
-        result.field25_ = value;
-        return this;
-      }
-      public Builder ClearField25() {
-        PrepareBuilder();
-        result.hasField25 = false;
-        result.field25_ = 0;
-        return this;
-      }
-
-      public bool HasField15 {
-       get { return result.hasField15; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage Field15 {
-        get { return result.Field15; }
-        set { SetField15(value); }
-      }
-      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField15 = true;
-        result.field15_ = value;
-        return this;
-      }
-      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasField15 = true;
-        result.field15_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeField15(global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasField15 &&
-            result.field15_ != global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.DefaultInstance) {
-            result.field15_ = global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.CreateBuilder(result.field15_).MergeFrom(value).BuildPartial();
-        } else {
-          result.field15_ = value;
-        }
-        result.hasField15 = true;
-        return this;
-      }
-      public Builder ClearField15() {
-        PrepareBuilder();
-        result.hasField15 = false;
-        result.field15_ = null;
-        return this;
-      }
-
-      public bool HasField78 {
-        get { return result.hasField78; }
-      }
-      public bool Field78 {
-        get { return result.Field78; }
-        set { SetField78(value); }
-      }
-      public Builder SetField78(bool value) {
-        PrepareBuilder();
-        result.hasField78 = true;
-        result.field78_ = value;
-        return this;
-      }
-      public Builder ClearField78() {
-        PrepareBuilder();
-        result.hasField78 = false;
-        result.field78_ = false;
-        return this;
-      }
-
-      public bool HasField67 {
-        get { return result.hasField67; }
-      }
-      public int Field67 {
-        get { return result.Field67; }
-        set { SetField67(value); }
-      }
-      public Builder SetField67(int value) {
-        PrepareBuilder();
-        result.hasField67 = true;
-        result.field67_ = value;
-        return this;
-      }
-      public Builder ClearField67() {
-        PrepareBuilder();
-        result.hasField67 = false;
-        result.field67_ = 0;
-        return this;
-      }
-
-      public bool HasField68 {
-        get { return result.hasField68; }
-      }
-      public int Field68 {
-        get { return result.Field68; }
-        set { SetField68(value); }
-      }
-      public Builder SetField68(int value) {
-        PrepareBuilder();
-        result.hasField68 = true;
-        result.field68_ = value;
-        return this;
-      }
-      public Builder ClearField68() {
-        PrepareBuilder();
-        result.hasField68 = false;
-        result.field68_ = 0;
-        return this;
-      }
-
-      public bool HasField128 {
-        get { return result.hasField128; }
-      }
-      public int Field128 {
-        get { return result.Field128; }
-        set { SetField128(value); }
-      }
-      public Builder SetField128(int value) {
-        PrepareBuilder();
-        result.hasField128 = true;
-        result.field128_ = value;
-        return this;
-      }
-      public Builder ClearField128() {
-        PrepareBuilder();
-        result.hasField128 = false;
-        result.field128_ = 0;
-        return this;
-      }
-
-      public bool HasField129 {
-        get { return result.hasField129; }
-      }
-      public string Field129 {
-        get { return result.Field129; }
-        set { SetField129(value); }
-      }
-      public Builder SetField129(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField129 = true;
-        result.field129_ = value;
-        return this;
-      }
-      public Builder ClearField129() {
-        PrepareBuilder();
-        result.hasField129 = false;
-        result.field129_ = "xxxxxxxxxxxxxxxxxxxxx";
-        return this;
-      }
-
-      public bool HasField131 {
-        get { return result.hasField131; }
-      }
-      public int Field131 {
-        get { return result.Field131; }
-        set { SetField131(value); }
-      }
-      public Builder SetField131(int value) {
-        PrepareBuilder();
-        result.hasField131 = true;
-        result.field131_ = value;
-        return this;
-      }
-      public Builder ClearField131() {
-        PrepareBuilder();
-        result.hasField131 = false;
-        result.field131_ = 0;
-        return this;
-      }
-    }
-    static SizeMessage1() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSize.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SizeMessage1SubMessage : pb::GeneratedMessage<SizeMessage1SubMessage, SizeMessage1SubMessage.Builder> {
-    private SizeMessage1SubMessage() { }
-    private static readonly SizeMessage1SubMessage defaultInstance = new SizeMessage1SubMessage().MakeReadOnly();
-    public static SizeMessage1SubMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SizeMessage1SubMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SizeMessage1SubMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage1SubMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage1SubMessage, SizeMessage1SubMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage1SubMessage__FieldAccessorTable; }
-    }
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private int field1_;
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public int Field1 {
-      get { return field1_; }
-    }
-
-    public const int Field2FieldNumber = 2;
-    private bool hasField2;
-    private int field2_;
-    public bool HasField2 {
-      get { return hasField2; }
-    }
-    public int Field2 {
-      get { return field2_; }
-    }
-
-    public const int Field3FieldNumber = 3;
-    private bool hasField3;
-    private int field3_;
-    public bool HasField3 {
-      get { return hasField3; }
-    }
-    public int Field3 {
-      get { return field3_; }
-    }
-
-    public const int Field15FieldNumber = 15;
-    private bool hasField15;
-    private string field15_ = "";
-    public bool HasField15 {
-      get { return hasField15; }
-    }
-    public string Field15 {
-      get { return field15_; }
-    }
-
-    public const int Field12FieldNumber = 12;
-    private bool hasField12;
-    private bool field12_ = true;
-    public bool HasField12 {
-      get { return hasField12; }
-    }
-    public bool Field12 {
-      get { return field12_; }
-    }
-
-    public const int Field13FieldNumber = 13;
-    private bool hasField13;
-    private long field13_;
-    public bool HasField13 {
-      get { return hasField13; }
-    }
-    public long Field13 {
-      get { return field13_; }
-    }
-
-    public const int Field14FieldNumber = 14;
-    private bool hasField14;
-    private long field14_;
-    public bool HasField14 {
-      get { return hasField14; }
-    }
-    public long Field14 {
-      get { return field14_; }
-    }
-
-    public const int Field16FieldNumber = 16;
-    private bool hasField16;
-    private int field16_;
-    public bool HasField16 {
-      get { return hasField16; }
-    }
-    public int Field16 {
-      get { return field16_; }
-    }
-
-    public const int Field19FieldNumber = 19;
-    private bool hasField19;
-    private int field19_ = 2;
-    public bool HasField19 {
-      get { return hasField19; }
-    }
-    public int Field19 {
-      get { return field19_; }
-    }
-
-    public const int Field20FieldNumber = 20;
-    private bool hasField20;
-    private bool field20_ = true;
-    public bool HasField20 {
-      get { return hasField20; }
-    }
-    public bool Field20 {
-      get { return field20_; }
-    }
-
-    public const int Field28FieldNumber = 28;
-    private bool hasField28;
-    private bool field28_ = true;
-    public bool HasField28 {
-      get { return hasField28; }
-    }
-    public bool Field28 {
-      get { return field28_; }
-    }
-
-    public const int Field21FieldNumber = 21;
-    private bool hasField21;
-    private ulong field21_;
-    public bool HasField21 {
-      get { return hasField21; }
-    }
-    public ulong Field21 {
-      get { return field21_; }
-    }
-
-    public const int Field22FieldNumber = 22;
-    private bool hasField22;
-    private int field22_;
-    public bool HasField22 {
-      get { return hasField22; }
-    }
-    public int Field22 {
-      get { return field22_; }
-    }
-
-    public const int Field23FieldNumber = 23;
-    private bool hasField23;
-    private bool field23_;
-    public bool HasField23 {
-      get { return hasField23; }
-    }
-    public bool Field23 {
-      get { return field23_; }
-    }
-
-    public const int Field206FieldNumber = 206;
-    private bool hasField206;
-    private bool field206_;
-    public bool HasField206 {
-      get { return hasField206; }
-    }
-    public bool Field206 {
-      get { return field206_; }
-    }
-
-    public const int Field203FieldNumber = 203;
-    private bool hasField203;
-    private uint field203_;
-    public bool HasField203 {
-      get { return hasField203; }
-    }
-    public uint Field203 {
-      get { return field203_; }
-    }
-
-    public const int Field204FieldNumber = 204;
-    private bool hasField204;
-    private int field204_;
-    public bool HasField204 {
-      get { return hasField204; }
-    }
-    public int Field204 {
-      get { return field204_; }
-    }
-
-    public const int Field205FieldNumber = 205;
-    private bool hasField205;
-    private string field205_ = "";
-    public bool HasField205 {
-      get { return hasField205; }
-    }
-    public string Field205 {
-      get { return field205_; }
-    }
-
-    public const int Field207FieldNumber = 207;
-    private bool hasField207;
-    private ulong field207_;
-    public bool HasField207 {
-      get { return hasField207; }
-    }
-    public ulong Field207 {
-      get { return field207_; }
-    }
-
-    public const int Field300FieldNumber = 300;
-    private bool hasField300;
-    private ulong field300_;
-    public bool HasField300 {
-      get { return hasField300; }
-    }
-    public ulong Field300 {
-      get { return field300_; }
-    }
-
-    public static SizeMessage1SubMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SizeMessage1SubMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SizeMessage1SubMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(SizeMessage1SubMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage1SubMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SizeMessage1SubMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SizeMessage1SubMessage result;
-
-      private SizeMessage1SubMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SizeMessage1SubMessage original = result;
-          result = new SizeMessage1SubMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SizeMessage1SubMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Descriptor; }
-      }
-
-      public override SizeMessage1SubMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.DefaultInstance; }
-      }
-
-      public override SizeMessage1SubMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public int Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(int value) {
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = 0;
-        return this;
-      }
-
-      public bool HasField2 {
-        get { return result.hasField2; }
-      }
-      public int Field2 {
-        get { return result.Field2; }
-        set { SetField2(value); }
-      }
-      public Builder SetField2(int value) {
-        PrepareBuilder();
-        result.hasField2 = true;
-        result.field2_ = value;
-        return this;
-      }
-      public Builder ClearField2() {
-        PrepareBuilder();
-        result.hasField2 = false;
-        result.field2_ = 0;
-        return this;
-      }
-
-      public bool HasField3 {
-        get { return result.hasField3; }
-      }
-      public int Field3 {
-        get { return result.Field3; }
-        set { SetField3(value); }
-      }
-      public Builder SetField3(int value) {
-        PrepareBuilder();
-        result.hasField3 = true;
-        result.field3_ = value;
-        return this;
-      }
-      public Builder ClearField3() {
-        PrepareBuilder();
-        result.hasField3 = false;
-        result.field3_ = 0;
-        return this;
-      }
-
-      public bool HasField15 {
-        get { return result.hasField15; }
-      }
-      public string Field15 {
-        get { return result.Field15; }
-        set { SetField15(value); }
-      }
-      public Builder SetField15(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField15 = true;
-        result.field15_ = value;
-        return this;
-      }
-      public Builder ClearField15() {
-        PrepareBuilder();
-        result.hasField15 = false;
-        result.field15_ = "";
-        return this;
-      }
-
-      public bool HasField12 {
-        get { return result.hasField12; }
-      }
-      public bool Field12 {
-        get { return result.Field12; }
-        set { SetField12(value); }
-      }
-      public Builder SetField12(bool value) {
-        PrepareBuilder();
-        result.hasField12 = true;
-        result.field12_ = value;
-        return this;
-      }
-      public Builder ClearField12() {
-        PrepareBuilder();
-        result.hasField12 = false;
-        result.field12_ = true;
-        return this;
-      }
-
-      public bool HasField13 {
-        get { return result.hasField13; }
-      }
-      public long Field13 {
-        get { return result.Field13; }
-        set { SetField13(value); }
-      }
-      public Builder SetField13(long value) {
-        PrepareBuilder();
-        result.hasField13 = true;
-        result.field13_ = value;
-        return this;
-      }
-      public Builder ClearField13() {
-        PrepareBuilder();
-        result.hasField13 = false;
-        result.field13_ = 0L;
-        return this;
-      }
-
-      public bool HasField14 {
-        get { return result.hasField14; }
-      }
-      public long Field14 {
-        get { return result.Field14; }
-        set { SetField14(value); }
-      }
-      public Builder SetField14(long value) {
-        PrepareBuilder();
-        result.hasField14 = true;
-        result.field14_ = value;
-        return this;
-      }
-      public Builder ClearField14() {
-        PrepareBuilder();
-        result.hasField14 = false;
-        result.field14_ = 0L;
-        return this;
-      }
-
-      public bool HasField16 {
-        get { return result.hasField16; }
-      }
-      public int Field16 {
-        get { return result.Field16; }
-        set { SetField16(value); }
-      }
-      public Builder SetField16(int value) {
-        PrepareBuilder();
-        result.hasField16 = true;
-        result.field16_ = value;
-        return this;
-      }
-      public Builder ClearField16() {
-        PrepareBuilder();
-        result.hasField16 = false;
-        result.field16_ = 0;
-        return this;
-      }
-
-      public bool HasField19 {
-        get { return result.hasField19; }
-      }
-      public int Field19 {
-        get { return result.Field19; }
-        set { SetField19(value); }
-      }
-      public Builder SetField19(int value) {
-        PrepareBuilder();
-        result.hasField19 = true;
-        result.field19_ = value;
-        return this;
-      }
-      public Builder ClearField19() {
-        PrepareBuilder();
-        result.hasField19 = false;
-        result.field19_ = 2;
-        return this;
-      }
-
-      public bool HasField20 {
-        get { return result.hasField20; }
-      }
-      public bool Field20 {
-        get { return result.Field20; }
-        set { SetField20(value); }
-      }
-      public Builder SetField20(bool value) {
-        PrepareBuilder();
-        result.hasField20 = true;
-        result.field20_ = value;
-        return this;
-      }
-      public Builder ClearField20() {
-        PrepareBuilder();
-        result.hasField20 = false;
-        result.field20_ = true;
-        return this;
-      }
-
-      public bool HasField28 {
-        get { return result.hasField28; }
-      }
-      public bool Field28 {
-        get { return result.Field28; }
-        set { SetField28(value); }
-      }
-      public Builder SetField28(bool value) {
-        PrepareBuilder();
-        result.hasField28 = true;
-        result.field28_ = value;
-        return this;
-      }
-      public Builder ClearField28() {
-        PrepareBuilder();
-        result.hasField28 = false;
-        result.field28_ = true;
-        return this;
-      }
-
-      public bool HasField21 {
-        get { return result.hasField21; }
-      }
-      public ulong Field21 {
-        get { return result.Field21; }
-        set { SetField21(value); }
-      }
-      public Builder SetField21(ulong value) {
-        PrepareBuilder();
-        result.hasField21 = true;
-        result.field21_ = value;
-        return this;
-      }
-      public Builder ClearField21() {
-        PrepareBuilder();
-        result.hasField21 = false;
-        result.field21_ = 0UL;
-        return this;
-      }
-
-      public bool HasField22 {
-        get { return result.hasField22; }
-      }
-      public int Field22 {
-        get { return result.Field22; }
-        set { SetField22(value); }
-      }
-      public Builder SetField22(int value) {
-        PrepareBuilder();
-        result.hasField22 = true;
-        result.field22_ = value;
-        return this;
-      }
-      public Builder ClearField22() {
-        PrepareBuilder();
-        result.hasField22 = false;
-        result.field22_ = 0;
-        return this;
-      }
-
-      public bool HasField23 {
-        get { return result.hasField23; }
-      }
-      public bool Field23 {
-        get { return result.Field23; }
-        set { SetField23(value); }
-      }
-      public Builder SetField23(bool value) {
-        PrepareBuilder();
-        result.hasField23 = true;
-        result.field23_ = value;
-        return this;
-      }
-      public Builder ClearField23() {
-        PrepareBuilder();
-        result.hasField23 = false;
-        result.field23_ = false;
-        return this;
-      }
-
-      public bool HasField206 {
-        get { return result.hasField206; }
-      }
-      public bool Field206 {
-        get { return result.Field206; }
-        set { SetField206(value); }
-      }
-      public Builder SetField206(bool value) {
-        PrepareBuilder();
-        result.hasField206 = true;
-        result.field206_ = value;
-        return this;
-      }
-      public Builder ClearField206() {
-        PrepareBuilder();
-        result.hasField206 = false;
-        result.field206_ = false;
-        return this;
-      }
-
-      public bool HasField203 {
-        get { return result.hasField203; }
-      }
-      public uint Field203 {
-        get { return result.Field203; }
-        set { SetField203(value); }
-      }
-      public Builder SetField203(uint value) {
-        PrepareBuilder();
-        result.hasField203 = true;
-        result.field203_ = value;
-        return this;
-      }
-      public Builder ClearField203() {
-        PrepareBuilder();
-        result.hasField203 = false;
-        result.field203_ = 0;
-        return this;
-      }
-
-      public bool HasField204 {
-        get { return result.hasField204; }
-      }
-      public int Field204 {
-        get { return result.Field204; }
-        set { SetField204(value); }
-      }
-      public Builder SetField204(int value) {
-        PrepareBuilder();
-        result.hasField204 = true;
-        result.field204_ = value;
-        return this;
-      }
-      public Builder ClearField204() {
-        PrepareBuilder();
-        result.hasField204 = false;
-        result.field204_ = 0;
-        return this;
-      }
-
-      public bool HasField205 {
-        get { return result.hasField205; }
-      }
-      public string Field205 {
-        get { return result.Field205; }
-        set { SetField205(value); }
-      }
-      public Builder SetField205(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField205 = true;
-        result.field205_ = value;
-        return this;
-      }
-      public Builder ClearField205() {
-        PrepareBuilder();
-        result.hasField205 = false;
-        result.field205_ = "";
-        return this;
-      }
-
-      public bool HasField207 {
-        get { return result.hasField207; }
-      }
-      public ulong Field207 {
-        get { return result.Field207; }
-        set { SetField207(value); }
-      }
-      public Builder SetField207(ulong value) {
-        PrepareBuilder();
-        result.hasField207 = true;
-        result.field207_ = value;
-        return this;
-      }
-      public Builder ClearField207() {
-        PrepareBuilder();
-        result.hasField207 = false;
-        result.field207_ = 0UL;
-        return this;
-      }
-
-      public bool HasField300 {
-        get { return result.hasField300; }
-      }
-      public ulong Field300 {
-        get { return result.Field300; }
-        set { SetField300(value); }
-      }
-      public Builder SetField300(ulong value) {
-        PrepareBuilder();
-        result.hasField300 = true;
-        result.field300_ = value;
-        return this;
-      }
-      public Builder ClearField300() {
-        PrepareBuilder();
-        result.hasField300 = false;
-        result.field300_ = 0UL;
-        return this;
-      }
-    }
-    static SizeMessage1SubMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSize.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SizeMessage2 : pb::GeneratedMessage<SizeMessage2, SizeMessage2.Builder> {
-    private SizeMessage2() { }
-    private static readonly SizeMessage2 defaultInstance = new SizeMessage2().MakeReadOnly();
-    public static SizeMessage2 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SizeMessage2 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SizeMessage2 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage2__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage2, SizeMessage2.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage2__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {
-        private Group1() { }
-        private static readonly Group1 defaultInstance = new Group1().MakeReadOnly();
-        public static Group1 DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override Group1 DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override Group1 ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage2_Group1__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage2_Group1__FieldAccessorTable; }
-        }
-
-        public const int Field11FieldNumber = 11;
-        private bool hasField11;
-        private float field11_;
-        public bool HasField11 {
-          get { return hasField11; }
-        }
-        public float Field11 {
-          get { return field11_; }
-        }
-
-        public const int Field26FieldNumber = 26;
-        private bool hasField26;
-        private float field26_;
-        public bool HasField26 {
-          get { return hasField26; }
-        }
-        public float Field26 {
-          get { return field26_; }
-        }
-
-        public const int Field12FieldNumber = 12;
-        private bool hasField12;
-        private string field12_ = "";
-        public bool HasField12 {
-          get { return hasField12; }
-        }
-        public string Field12 {
-          get { return field12_; }
-        }
-
-        public const int Field13FieldNumber = 13;
-        private bool hasField13;
-        private string field13_ = "";
-        public bool HasField13 {
-          get { return hasField13; }
-        }
-        public string Field13 {
-          get { return field13_; }
-        }
-
-        public const int Field14FieldNumber = 14;
-        private pbc::PopsicleList<string> field14_ = new pbc::PopsicleList<string>();
-        public scg::IList<string> Field14List {
-          get { return pbc::Lists.AsReadOnly(field14_); }
-        }
-        public int Field14Count {
-          get { return field14_.Count; }
-        }
-        public string GetField14(int index) {
-          return field14_[index];
-        }
-
-        public const int Field15FieldNumber = 15;
-        private bool hasField15;
-        private ulong field15_;
-        public bool HasField15 {
-          get { return hasField15; }
-        }
-        public ulong Field15 {
-          get { return field15_; }
-        }
-
-        public const int Field5FieldNumber = 5;
-        private bool hasField5;
-        private int field5_;
-        public bool HasField5 {
-          get { return hasField5; }
-        }
-        public int Field5 {
-          get { return field5_; }
-        }
-
-        public const int Field27FieldNumber = 27;
-        private bool hasField27;
-        private string field27_ = "";
-        public bool HasField27 {
-          get { return hasField27; }
-        }
-        public string Field27 {
-          get { return field27_; }
-        }
-
-        public const int Field28FieldNumber = 28;
-        private bool hasField28;
-        private int field28_;
-        public bool HasField28 {
-          get { return hasField28; }
-        }
-        public int Field28 {
-          get { return field28_; }
-        }
-
-        public const int Field29FieldNumber = 29;
-        private bool hasField29;
-        private string field29_ = "";
-        public bool HasField29 {
-          get { return hasField29; }
-        }
-        public string Field29 {
-          get { return field29_; }
-        }
-
-        public const int Field16FieldNumber = 16;
-        private bool hasField16;
-        private string field16_ = "";
-        public bool HasField16 {
-          get { return hasField16; }
-        }
-        public string Field16 {
-          get { return field16_; }
-        }
-
-        public const int Field22FieldNumber = 22;
-        private pbc::PopsicleList<string> field22_ = new pbc::PopsicleList<string>();
-        public scg::IList<string> Field22List {
-          get { return pbc::Lists.AsReadOnly(field22_); }
-        }
-        public int Field22Count {
-          get { return field22_.Count; }
-        }
-        public string GetField22(int index) {
-          return field22_[index];
-        }
-
-        public const int Field73FieldNumber = 73;
-        private pbc::PopsicleList<int> field73_ = new pbc::PopsicleList<int>();
-        public scg::IList<int> Field73List {
-          get { return pbc::Lists.AsReadOnly(field73_); }
-        }
-        public int Field73Count {
-          get { return field73_.Count; }
-        }
-        public int GetField73(int index) {
-          return field73_[index];
-        }
-
-        public const int Field20FieldNumber = 20;
-        private bool hasField20;
-        private int field20_;
-        public bool HasField20 {
-          get { return hasField20; }
-        }
-        public int Field20 {
-          get { return field20_; }
-        }
-
-        public const int Field24FieldNumber = 24;
-        private bool hasField24;
-        private string field24_ = "";
-        public bool HasField24 {
-          get { return hasField24; }
-        }
-        public string Field24 {
-          get { return field24_; }
-        }
-
-        public const int Field31FieldNumber = 31;
-        private bool hasField31;
-        private global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage field31_;
-        public bool HasField31 {
-          get { return hasField31; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage Field31 {
-          get { return field31_ ?? global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.DefaultInstance; }
-        }
-
-        public static Group1 ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Group1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Group1 ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Group1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Group1 ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Group1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static Group1 ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private Group1 MakeReadOnly() {
-          field14_.MakeReadOnly();
-          field22_.MakeReadOnly();
-          field73_.MakeReadOnly();
-          return this;
-        }
-
-        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(Group1 prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(Group1 cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private Group1 result;
-
-          private Group1 PrepareBuilder() {
-            if (resultIsReadOnly) {
-              Group1 original = result;
-              result = new Group1();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override Group1 MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Descriptor; }
-          }
-
-          public override Group1 DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.DefaultInstance; }
-          }
-
-          public override Group1 BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-
-          public bool HasField11 {
-            get { return result.hasField11; }
-          }
-          public float Field11 {
-            get { return result.Field11; }
-            set { SetField11(value); }
-          }
-          public Builder SetField11(float value) {
-            PrepareBuilder();
-            result.hasField11 = true;
-            result.field11_ = value;
-            return this;
-          }
-          public Builder ClearField11() {
-            PrepareBuilder();
-            result.hasField11 = false;
-            result.field11_ = 0F;
-            return this;
-          }
-
-          public bool HasField26 {
-            get { return result.hasField26; }
-          }
-          public float Field26 {
-            get { return result.Field26; }
-            set { SetField26(value); }
-          }
-          public Builder SetField26(float value) {
-            PrepareBuilder();
-            result.hasField26 = true;
-            result.field26_ = value;
-            return this;
-          }
-          public Builder ClearField26() {
-            PrepareBuilder();
-            result.hasField26 = false;
-            result.field26_ = 0F;
-            return this;
-          }
-
-          public bool HasField12 {
-            get { return result.hasField12; }
-          }
-          public string Field12 {
-            get { return result.Field12; }
-            set { SetField12(value); }
-          }
-          public Builder SetField12(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField12 = true;
-            result.field12_ = value;
-            return this;
-          }
-          public Builder ClearField12() {
-            PrepareBuilder();
-            result.hasField12 = false;
-            result.field12_ = "";
-            return this;
-          }
-
-          public bool HasField13 {
-            get { return result.hasField13; }
-          }
-          public string Field13 {
-            get { return result.Field13; }
-            set { SetField13(value); }
-          }
-          public Builder SetField13(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField13 = true;
-            result.field13_ = value;
-            return this;
-          }
-          public Builder ClearField13() {
-            PrepareBuilder();
-            result.hasField13 = false;
-            result.field13_ = "";
-            return this;
-          }
-
-          public pbc::IPopsicleList<string> Field14List {
-            get { return PrepareBuilder().field14_; }
-          }
-          public int Field14Count {
-            get { return result.Field14Count; }
-          }
-          public string GetField14(int index) {
-            return result.GetField14(index);
-          }
-          public Builder SetField14(int index, string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field14_[index] = value;
-            return this;
-          }
-          public Builder AddField14(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field14_.Add(value);
-            return this;
-          }
-          public Builder AddRangeField14(scg::IEnumerable<string> values) {
-            PrepareBuilder();
-            result.field14_.Add(values);
-            return this;
-          }
-          public Builder ClearField14() {
-            PrepareBuilder();
-            result.field14_.Clear();
-            return this;
-          }
-
-          public bool HasField15 {
-            get { return result.hasField15; }
-          }
-          public ulong Field15 {
-            get { return result.Field15; }
-            set { SetField15(value); }
-          }
-          public Builder SetField15(ulong value) {
-            PrepareBuilder();
-            result.hasField15 = true;
-            result.field15_ = value;
-            return this;
-          }
-          public Builder ClearField15() {
-            PrepareBuilder();
-            result.hasField15 = false;
-            result.field15_ = 0UL;
-            return this;
-          }
-
-          public bool HasField5 {
-            get { return result.hasField5; }
-          }
-          public int Field5 {
-            get { return result.Field5; }
-            set { SetField5(value); }
-          }
-          public Builder SetField5(int value) {
-            PrepareBuilder();
-            result.hasField5 = true;
-            result.field5_ = value;
-            return this;
-          }
-          public Builder ClearField5() {
-            PrepareBuilder();
-            result.hasField5 = false;
-            result.field5_ = 0;
-            return this;
-          }
-
-          public bool HasField27 {
-            get { return result.hasField27; }
-          }
-          public string Field27 {
-            get { return result.Field27; }
-            set { SetField27(value); }
-          }
-          public Builder SetField27(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField27 = true;
-            result.field27_ = value;
-            return this;
-          }
-          public Builder ClearField27() {
-            PrepareBuilder();
-            result.hasField27 = false;
-            result.field27_ = "";
-            return this;
-          }
-
-          public bool HasField28 {
-            get { return result.hasField28; }
-          }
-          public int Field28 {
-            get { return result.Field28; }
-            set { SetField28(value); }
-          }
-          public Builder SetField28(int value) {
-            PrepareBuilder();
-            result.hasField28 = true;
-            result.field28_ = value;
-            return this;
-          }
-          public Builder ClearField28() {
-            PrepareBuilder();
-            result.hasField28 = false;
-            result.field28_ = 0;
-            return this;
-          }
-
-          public bool HasField29 {
-            get { return result.hasField29; }
-          }
-          public string Field29 {
-            get { return result.Field29; }
-            set { SetField29(value); }
-          }
-          public Builder SetField29(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField29 = true;
-            result.field29_ = value;
-            return this;
-          }
-          public Builder ClearField29() {
-            PrepareBuilder();
-            result.hasField29 = false;
-            result.field29_ = "";
-            return this;
-          }
-
-          public bool HasField16 {
-            get { return result.hasField16; }
-          }
-          public string Field16 {
-            get { return result.Field16; }
-            set { SetField16(value); }
-          }
-          public Builder SetField16(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField16 = true;
-            result.field16_ = value;
-            return this;
-          }
-          public Builder ClearField16() {
-            PrepareBuilder();
-            result.hasField16 = false;
-            result.field16_ = "";
-            return this;
-          }
-
-          public pbc::IPopsicleList<string> Field22List {
-            get { return PrepareBuilder().field22_; }
-          }
-          public int Field22Count {
-            get { return result.Field22Count; }
-          }
-          public string GetField22(int index) {
-            return result.GetField22(index);
-          }
-          public Builder SetField22(int index, string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field22_[index] = value;
-            return this;
-          }
-          public Builder AddField22(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field22_.Add(value);
-            return this;
-          }
-          public Builder AddRangeField22(scg::IEnumerable<string> values) {
-            PrepareBuilder();
-            result.field22_.Add(values);
-            return this;
-          }
-          public Builder ClearField22() {
-            PrepareBuilder();
-            result.field22_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<int> Field73List {
-            get { return PrepareBuilder().field73_; }
-          }
-          public int Field73Count {
-            get { return result.Field73Count; }
-          }
-          public int GetField73(int index) {
-            return result.GetField73(index);
-          }
-          public Builder SetField73(int index, int value) {
-            PrepareBuilder();
-            result.field73_[index] = value;
-            return this;
-          }
-          public Builder AddField73(int value) {
-            PrepareBuilder();
-            result.field73_.Add(value);
-            return this;
-          }
-          public Builder AddRangeField73(scg::IEnumerable<int> values) {
-            PrepareBuilder();
-            result.field73_.Add(values);
-            return this;
-          }
-          public Builder ClearField73() {
-            PrepareBuilder();
-            result.field73_.Clear();
-            return this;
-          }
-
-          public bool HasField20 {
-            get { return result.hasField20; }
-          }
-          public int Field20 {
-            get { return result.Field20; }
-            set { SetField20(value); }
-          }
-          public Builder SetField20(int value) {
-            PrepareBuilder();
-            result.hasField20 = true;
-            result.field20_ = value;
-            return this;
-          }
-          public Builder ClearField20() {
-            PrepareBuilder();
-            result.hasField20 = false;
-            result.field20_ = 0;
-            return this;
-          }
-
-          public bool HasField24 {
-            get { return result.hasField24; }
-          }
-          public string Field24 {
-            get { return result.Field24; }
-            set { SetField24(value); }
-          }
-          public Builder SetField24(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField24 = true;
-            result.field24_ = value;
-            return this;
-          }
-          public Builder ClearField24() {
-            PrepareBuilder();
-            result.hasField24 = false;
-            result.field24_ = "";
-            return this;
-          }
-
-          public bool HasField31 {
-           get { return result.hasField31; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage Field31 {
-            get { return result.Field31; }
-            set { SetField31(value); }
-          }
-          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField31 = true;
-            result.field31_ = value;
-            return this;
-          }
-          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.hasField31 = true;
-            result.field31_ = builderForValue.Build();
-            return this;
-          }
-          public Builder MergeField31(global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            if (result.hasField31 &&
-                result.field31_ != global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.DefaultInstance) {
-                result.field31_ = global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.CreateBuilder(result.field31_).MergeFrom(value).BuildPartial();
-            } else {
-              result.field31_ = value;
-            }
-            result.hasField31 = true;
-            return this;
-          }
-          public Builder ClearField31() {
-            PrepareBuilder();
-            result.hasField31 = false;
-            result.field31_ = null;
-            return this;
-          }
-        }
-        static Group1() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSize.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private string field1_ = "";
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public string Field1 {
-      get { return field1_; }
-    }
-
-    public const int Field3FieldNumber = 3;
-    private bool hasField3;
-    private long field3_;
-    public bool HasField3 {
-      get { return hasField3; }
-    }
-    public long Field3 {
-      get { return field3_; }
-    }
-
-    public const int Field4FieldNumber = 4;
-    private bool hasField4;
-    private long field4_;
-    public bool HasField4 {
-      get { return hasField4; }
-    }
-    public long Field4 {
-      get { return field4_; }
-    }
-
-    public const int Field30FieldNumber = 30;
-    private bool hasField30;
-    private long field30_;
-    public bool HasField30 {
-      get { return hasField30; }
-    }
-    public long Field30 {
-      get { return field30_; }
-    }
-
-    public const int Field75FieldNumber = 75;
-    private bool hasField75;
-    private bool field75_;
-    public bool HasField75 {
-      get { return hasField75; }
-    }
-    public bool Field75 {
-      get { return field75_; }
-    }
-
-    public const int Field6FieldNumber = 6;
-    private bool hasField6;
-    private string field6_ = "";
-    public bool HasField6 {
-      get { return hasField6; }
-    }
-    public string Field6 {
-      get { return field6_; }
-    }
-
-    public const int Field2FieldNumber = 2;
-    private bool hasField2;
-    private pb::ByteString field2_ = pb::ByteString.Empty;
-    public bool HasField2 {
-      get { return hasField2; }
-    }
-    public pb::ByteString Field2 {
-      get { return field2_; }
-    }
-
-    public const int Field21FieldNumber = 21;
-    private bool hasField21;
-    private int field21_;
-    public bool HasField21 {
-      get { return hasField21; }
-    }
-    public int Field21 {
-      get { return field21_; }
-    }
-
-    public const int Field71FieldNumber = 71;
-    private bool hasField71;
-    private int field71_;
-    public bool HasField71 {
-      get { return hasField71; }
-    }
-    public int Field71 {
-      get { return field71_; }
-    }
-
-    public const int Field25FieldNumber = 25;
-    private bool hasField25;
-    private float field25_;
-    public bool HasField25 {
-      get { return hasField25; }
-    }
-    public float Field25 {
-      get { return field25_; }
-    }
-
-    public const int Field109FieldNumber = 109;
-    private bool hasField109;
-    private int field109_;
-    public bool HasField109 {
-      get { return hasField109; }
-    }
-    public int Field109 {
-      get { return field109_; }
-    }
-
-    public const int Field210FieldNumber = 210;
-    private bool hasField210;
-    private int field210_;
-    public bool HasField210 {
-      get { return hasField210; }
-    }
-    public int Field210 {
-      get { return field210_; }
-    }
-
-    public const int Field211FieldNumber = 211;
-    private bool hasField211;
-    private int field211_;
-    public bool HasField211 {
-      get { return hasField211; }
-    }
-    public int Field211 {
-      get { return field211_; }
-    }
-
-    public const int Field212FieldNumber = 212;
-    private bool hasField212;
-    private int field212_;
-    public bool HasField212 {
-      get { return hasField212; }
-    }
-    public int Field212 {
-      get { return field212_; }
-    }
-
-    public const int Field213FieldNumber = 213;
-    private bool hasField213;
-    private int field213_;
-    public bool HasField213 {
-      get { return hasField213; }
-    }
-    public int Field213 {
-      get { return field213_; }
-    }
-
-    public const int Field216FieldNumber = 216;
-    private bool hasField216;
-    private int field216_;
-    public bool HasField216 {
-      get { return hasField216; }
-    }
-    public int Field216 {
-      get { return field216_; }
-    }
-
-    public const int Field217FieldNumber = 217;
-    private bool hasField217;
-    private int field217_;
-    public bool HasField217 {
-      get { return hasField217; }
-    }
-    public int Field217 {
-      get { return field217_; }
-    }
-
-    public const int Field218FieldNumber = 218;
-    private bool hasField218;
-    private int field218_;
-    public bool HasField218 {
-      get { return hasField218; }
-    }
-    public int Field218 {
-      get { return field218_; }
-    }
-
-    public const int Field220FieldNumber = 220;
-    private bool hasField220;
-    private int field220_;
-    public bool HasField220 {
-      get { return hasField220; }
-    }
-    public int Field220 {
-      get { return field220_; }
-    }
-
-    public const int Field221FieldNumber = 221;
-    private bool hasField221;
-    private int field221_;
-    public bool HasField221 {
-      get { return hasField221; }
-    }
-    public int Field221 {
-      get { return field221_; }
-    }
-
-    public const int Field222FieldNumber = 222;
-    private bool hasField222;
-    private float field222_;
-    public bool HasField222 {
-      get { return hasField222; }
-    }
-    public float Field222 {
-      get { return field222_; }
-    }
-
-    public const int Field63FieldNumber = 63;
-    private bool hasField63;
-    private int field63_;
-    public bool HasField63 {
-      get { return hasField63; }
-    }
-    public int Field63 {
-      get { return field63_; }
-    }
-
-    public const int Group1FieldNumber = 10;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> group1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> Group1List {
-      get { return group1_; }
-    }
-    public int Group1Count {
-      get { return group1_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 GetGroup1(int index) {
-      return group1_[index];
-    }
-
-    public const int Field128FieldNumber = 128;
-    private pbc::PopsicleList<string> field128_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> Field128List {
-      get { return pbc::Lists.AsReadOnly(field128_); }
-    }
-    public int Field128Count {
-      get { return field128_.Count; }
-    }
-    public string GetField128(int index) {
-      return field128_[index];
-    }
-
-    public const int Field131FieldNumber = 131;
-    private bool hasField131;
-    private long field131_;
-    public bool HasField131 {
-      get { return hasField131; }
-    }
-    public long Field131 {
-      get { return field131_; }
-    }
-
-    public const int Field127FieldNumber = 127;
-    private pbc::PopsicleList<string> field127_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> Field127List {
-      get { return pbc::Lists.AsReadOnly(field127_); }
-    }
-    public int Field127Count {
-      get { return field127_.Count; }
-    }
-    public string GetField127(int index) {
-      return field127_[index];
-    }
-
-    public const int Field129FieldNumber = 129;
-    private bool hasField129;
-    private int field129_;
-    public bool HasField129 {
-      get { return hasField129; }
-    }
-    public int Field129 {
-      get { return field129_; }
-    }
-
-    public const int Field130FieldNumber = 130;
-    private pbc::PopsicleList<long> field130_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> Field130List {
-      get { return pbc::Lists.AsReadOnly(field130_); }
-    }
-    public int Field130Count {
-      get { return field130_.Count; }
-    }
-    public long GetField130(int index) {
-      return field130_[index];
-    }
-
-    public const int Field205FieldNumber = 205;
-    private bool hasField205;
-    private bool field205_;
-    public bool HasField205 {
-      get { return hasField205; }
-    }
-    public bool Field205 {
-      get { return field205_; }
-    }
-
-    public const int Field206FieldNumber = 206;
-    private bool hasField206;
-    private bool field206_;
-    public bool HasField206 {
-      get { return hasField206; }
-    }
-    public bool Field206 {
-      get { return field206_; }
-    }
-
-    public static SizeMessage2 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SizeMessage2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage2 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SizeMessage2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage2 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SizeMessage2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage2 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SizeMessage2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SizeMessage2 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SizeMessage2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SizeMessage2 MakeReadOnly() {
-      group1_.MakeReadOnly();
-      field128_.MakeReadOnly();
-      field127_.MakeReadOnly();
-      field130_.MakeReadOnly();
-      return this;
-    }
-
-    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(SizeMessage2 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage2, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SizeMessage2 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SizeMessage2 result;
-
-      private SizeMessage2 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SizeMessage2 original = result;
-          result = new SizeMessage2();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SizeMessage2 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Descriptor; }
-      }
-
-      public override SizeMessage2 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2.DefaultInstance; }
-      }
-
-      public override SizeMessage2 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public string Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = "";
-        return this;
-      }
-
-      public bool HasField3 {
-        get { return result.hasField3; }
-      }
-      public long Field3 {
-        get { return result.Field3; }
-        set { SetField3(value); }
-      }
-      public Builder SetField3(long value) {
-        PrepareBuilder();
-        result.hasField3 = true;
-        result.field3_ = value;
-        return this;
-      }
-      public Builder ClearField3() {
-        PrepareBuilder();
-        result.hasField3 = false;
-        result.field3_ = 0L;
-        return this;
-      }
-
-      public bool HasField4 {
-        get { return result.hasField4; }
-      }
-      public long Field4 {
-        get { return result.Field4; }
-        set { SetField4(value); }
-      }
-      public Builder SetField4(long value) {
-        PrepareBuilder();
-        result.hasField4 = true;
-        result.field4_ = value;
-        return this;
-      }
-      public Builder ClearField4() {
-        PrepareBuilder();
-        result.hasField4 = false;
-        result.field4_ = 0L;
-        return this;
-      }
-
-      public bool HasField30 {
-        get { return result.hasField30; }
-      }
-      public long Field30 {
-        get { return result.Field30; }
-        set { SetField30(value); }
-      }
-      public Builder SetField30(long value) {
-        PrepareBuilder();
-        result.hasField30 = true;
-        result.field30_ = value;
-        return this;
-      }
-      public Builder ClearField30() {
-        PrepareBuilder();
-        result.hasField30 = false;
-        result.field30_ = 0L;
-        return this;
-      }
-
-      public bool HasField75 {
-        get { return result.hasField75; }
-      }
-      public bool Field75 {
-        get { return result.Field75; }
-        set { SetField75(value); }
-      }
-      public Builder SetField75(bool value) {
-        PrepareBuilder();
-        result.hasField75 = true;
-        result.field75_ = value;
-        return this;
-      }
-      public Builder ClearField75() {
-        PrepareBuilder();
-        result.hasField75 = false;
-        result.field75_ = false;
-        return this;
-      }
-
-      public bool HasField6 {
-        get { return result.hasField6; }
-      }
-      public string Field6 {
-        get { return result.Field6; }
-        set { SetField6(value); }
-      }
-      public Builder SetField6(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField6 = true;
-        result.field6_ = value;
-        return this;
-      }
-      public Builder ClearField6() {
-        PrepareBuilder();
-        result.hasField6 = false;
-        result.field6_ = "";
-        return this;
-      }
-
-      public bool HasField2 {
-        get { return result.hasField2; }
-      }
-      public pb::ByteString Field2 {
-        get { return result.Field2; }
-        set { SetField2(value); }
-      }
-      public Builder SetField2(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField2 = true;
-        result.field2_ = value;
-        return this;
-      }
-      public Builder ClearField2() {
-        PrepareBuilder();
-        result.hasField2 = false;
-        result.field2_ = pb::ByteString.Empty;
-        return this;
-      }
-
-      public bool HasField21 {
-        get { return result.hasField21; }
-      }
-      public int Field21 {
-        get { return result.Field21; }
-        set { SetField21(value); }
-      }
-      public Builder SetField21(int value) {
-        PrepareBuilder();
-        result.hasField21 = true;
-        result.field21_ = value;
-        return this;
-      }
-      public Builder ClearField21() {
-        PrepareBuilder();
-        result.hasField21 = false;
-        result.field21_ = 0;
-        return this;
-      }
-
-      public bool HasField71 {
-        get { return result.hasField71; }
-      }
-      public int Field71 {
-        get { return result.Field71; }
-        set { SetField71(value); }
-      }
-      public Builder SetField71(int value) {
-        PrepareBuilder();
-        result.hasField71 = true;
-        result.field71_ = value;
-        return this;
-      }
-      public Builder ClearField71() {
-        PrepareBuilder();
-        result.hasField71 = false;
-        result.field71_ = 0;
-        return this;
-      }
-
-      public bool HasField25 {
-        get { return result.hasField25; }
-      }
-      public float Field25 {
-        get { return result.Field25; }
-        set { SetField25(value); }
-      }
-      public Builder SetField25(float value) {
-        PrepareBuilder();
-        result.hasField25 = true;
-        result.field25_ = value;
-        return this;
-      }
-      public Builder ClearField25() {
-        PrepareBuilder();
-        result.hasField25 = false;
-        result.field25_ = 0F;
-        return this;
-      }
-
-      public bool HasField109 {
-        get { return result.hasField109; }
-      }
-      public int Field109 {
-        get { return result.Field109; }
-        set { SetField109(value); }
-      }
-      public Builder SetField109(int value) {
-        PrepareBuilder();
-        result.hasField109 = true;
-        result.field109_ = value;
-        return this;
-      }
-      public Builder ClearField109() {
-        PrepareBuilder();
-        result.hasField109 = false;
-        result.field109_ = 0;
-        return this;
-      }
-
-      public bool HasField210 {
-        get { return result.hasField210; }
-      }
-      public int Field210 {
-        get { return result.Field210; }
-        set { SetField210(value); }
-      }
-      public Builder SetField210(int value) {
-        PrepareBuilder();
-        result.hasField210 = true;
-        result.field210_ = value;
-        return this;
-      }
-      public Builder ClearField210() {
-        PrepareBuilder();
-        result.hasField210 = false;
-        result.field210_ = 0;
-        return this;
-      }
-
-      public bool HasField211 {
-        get { return result.hasField211; }
-      }
-      public int Field211 {
-        get { return result.Field211; }
-        set { SetField211(value); }
-      }
-      public Builder SetField211(int value) {
-        PrepareBuilder();
-        result.hasField211 = true;
-        result.field211_ = value;
-        return this;
-      }
-      public Builder ClearField211() {
-        PrepareBuilder();
-        result.hasField211 = false;
-        result.field211_ = 0;
-        return this;
-      }
-
-      public bool HasField212 {
-        get { return result.hasField212; }
-      }
-      public int Field212 {
-        get { return result.Field212; }
-        set { SetField212(value); }
-      }
-      public Builder SetField212(int value) {
-        PrepareBuilder();
-        result.hasField212 = true;
-        result.field212_ = value;
-        return this;
-      }
-      public Builder ClearField212() {
-        PrepareBuilder();
-        result.hasField212 = false;
-        result.field212_ = 0;
-        return this;
-      }
-
-      public bool HasField213 {
-        get { return result.hasField213; }
-      }
-      public int Field213 {
-        get { return result.Field213; }
-        set { SetField213(value); }
-      }
-      public Builder SetField213(int value) {
-        PrepareBuilder();
-        result.hasField213 = true;
-        result.field213_ = value;
-        return this;
-      }
-      public Builder ClearField213() {
-        PrepareBuilder();
-        result.hasField213 = false;
-        result.field213_ = 0;
-        return this;
-      }
-
-      public bool HasField216 {
-        get { return result.hasField216; }
-      }
-      public int Field216 {
-        get { return result.Field216; }
-        set { SetField216(value); }
-      }
-      public Builder SetField216(int value) {
-        PrepareBuilder();
-        result.hasField216 = true;
-        result.field216_ = value;
-        return this;
-      }
-      public Builder ClearField216() {
-        PrepareBuilder();
-        result.hasField216 = false;
-        result.field216_ = 0;
-        return this;
-      }
-
-      public bool HasField217 {
-        get { return result.hasField217; }
-      }
-      public int Field217 {
-        get { return result.Field217; }
-        set { SetField217(value); }
-      }
-      public Builder SetField217(int value) {
-        PrepareBuilder();
-        result.hasField217 = true;
-        result.field217_ = value;
-        return this;
-      }
-      public Builder ClearField217() {
-        PrepareBuilder();
-        result.hasField217 = false;
-        result.field217_ = 0;
-        return this;
-      }
-
-      public bool HasField218 {
-        get { return result.hasField218; }
-      }
-      public int Field218 {
-        get { return result.Field218; }
-        set { SetField218(value); }
-      }
-      public Builder SetField218(int value) {
-        PrepareBuilder();
-        result.hasField218 = true;
-        result.field218_ = value;
-        return this;
-      }
-      public Builder ClearField218() {
-        PrepareBuilder();
-        result.hasField218 = false;
-        result.field218_ = 0;
-        return this;
-      }
-
-      public bool HasField220 {
-        get { return result.hasField220; }
-      }
-      public int Field220 {
-        get { return result.Field220; }
-        set { SetField220(value); }
-      }
-      public Builder SetField220(int value) {
-        PrepareBuilder();
-        result.hasField220 = true;
-        result.field220_ = value;
-        return this;
-      }
-      public Builder ClearField220() {
-        PrepareBuilder();
-        result.hasField220 = false;
-        result.field220_ = 0;
-        return this;
-      }
-
-      public bool HasField221 {
-        get { return result.hasField221; }
-      }
-      public int Field221 {
-        get { return result.Field221; }
-        set { SetField221(value); }
-      }
-      public Builder SetField221(int value) {
-        PrepareBuilder();
-        result.hasField221 = true;
-        result.field221_ = value;
-        return this;
-      }
-      public Builder ClearField221() {
-        PrepareBuilder();
-        result.hasField221 = false;
-        result.field221_ = 0;
-        return this;
-      }
-
-      public bool HasField222 {
-        get { return result.hasField222; }
-      }
-      public float Field222 {
-        get { return result.Field222; }
-        set { SetField222(value); }
-      }
-      public Builder SetField222(float value) {
-        PrepareBuilder();
-        result.hasField222 = true;
-        result.field222_ = value;
-        return this;
-      }
-      public Builder ClearField222() {
-        PrepareBuilder();
-        result.hasField222 = false;
-        result.field222_ = 0F;
-        return this;
-      }
-
-      public bool HasField63 {
-        get { return result.hasField63; }
-      }
-      public int Field63 {
-        get { return result.Field63; }
-        set { SetField63(value); }
-      }
-      public Builder SetField63(int value) {
-        PrepareBuilder();
-        result.hasField63 = true;
-        result.field63_ = value;
-        return this;
-      }
-      public Builder ClearField63() {
-        PrepareBuilder();
-        result.hasField63 = false;
-        result.field63_ = 0;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> Group1List {
-        get { return PrepareBuilder().group1_; }
-      }
-      public int Group1Count {
-        get { return result.Group1Count; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 GetGroup1(int index) {
-        return result.GetGroup1(index);
-      }
-      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.group1_[index] = value;
-        return this;
-      }
-      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.group1_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.group1_.Add(value);
-        return this;
-      }
-      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.group1_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> values) {
-        PrepareBuilder();
-        result.group1_.Add(values);
-        return this;
-      }
-      public Builder ClearGroup1() {
-        PrepareBuilder();
-        result.group1_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> Field128List {
-        get { return PrepareBuilder().field128_; }
-      }
-      public int Field128Count {
-        get { return result.Field128Count; }
-      }
-      public string GetField128(int index) {
-        return result.GetField128(index);
-      }
-      public Builder SetField128(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field128_[index] = value;
-        return this;
-      }
-      public Builder AddField128(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field128_.Add(value);
-        return this;
-      }
-      public Builder AddRangeField128(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.field128_.Add(values);
-        return this;
-      }
-      public Builder ClearField128() {
-        PrepareBuilder();
-        result.field128_.Clear();
-        return this;
-      }
-
-      public bool HasField131 {
-        get { return result.hasField131; }
-      }
-      public long Field131 {
-        get { return result.Field131; }
-        set { SetField131(value); }
-      }
-      public Builder SetField131(long value) {
-        PrepareBuilder();
-        result.hasField131 = true;
-        result.field131_ = value;
-        return this;
-      }
-      public Builder ClearField131() {
-        PrepareBuilder();
-        result.hasField131 = false;
-        result.field131_ = 0L;
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> Field127List {
-        get { return PrepareBuilder().field127_; }
-      }
-      public int Field127Count {
-        get { return result.Field127Count; }
-      }
-      public string GetField127(int index) {
-        return result.GetField127(index);
-      }
-      public Builder SetField127(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field127_[index] = value;
-        return this;
-      }
-      public Builder AddField127(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field127_.Add(value);
-        return this;
-      }
-      public Builder AddRangeField127(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.field127_.Add(values);
-        return this;
-      }
-      public Builder ClearField127() {
-        PrepareBuilder();
-        result.field127_.Clear();
-        return this;
-      }
-
-      public bool HasField129 {
-        get { return result.hasField129; }
-      }
-      public int Field129 {
-        get { return result.Field129; }
-        set { SetField129(value); }
-      }
-      public Builder SetField129(int value) {
-        PrepareBuilder();
-        result.hasField129 = true;
-        result.field129_ = value;
-        return this;
-      }
-      public Builder ClearField129() {
-        PrepareBuilder();
-        result.hasField129 = false;
-        result.field129_ = 0;
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> Field130List {
-        get { return PrepareBuilder().field130_; }
-      }
-      public int Field130Count {
-        get { return result.Field130Count; }
-      }
-      public long GetField130(int index) {
-        return result.GetField130(index);
-      }
-      public Builder SetField130(int index, long value) {
-        PrepareBuilder();
-        result.field130_[index] = value;
-        return this;
-      }
-      public Builder AddField130(long value) {
-        PrepareBuilder();
-        result.field130_.Add(value);
-        return this;
-      }
-      public Builder AddRangeField130(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.field130_.Add(values);
-        return this;
-      }
-      public Builder ClearField130() {
-        PrepareBuilder();
-        result.field130_.Clear();
-        return this;
-      }
-
-      public bool HasField205 {
-        get { return result.hasField205; }
-      }
-      public bool Field205 {
-        get { return result.Field205; }
-        set { SetField205(value); }
-      }
-      public Builder SetField205(bool value) {
-        PrepareBuilder();
-        result.hasField205 = true;
-        result.field205_ = value;
-        return this;
-      }
-      public Builder ClearField205() {
-        PrepareBuilder();
-        result.hasField205 = false;
-        result.field205_ = false;
-        return this;
-      }
-
-      public bool HasField206 {
-        get { return result.hasField206; }
-      }
-      public bool Field206 {
-        get { return result.Field206; }
-        set { SetField206(value); }
-      }
-      public Builder SetField206(bool value) {
-        PrepareBuilder();
-        result.hasField206 = true;
-        result.field206_ = value;
-        return this;
-      }
-      public Builder ClearField206() {
-        PrepareBuilder();
-        result.hasField206 = false;
-        result.field206_ = false;
-        return this;
-      }
-    }
-    static SizeMessage2() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSize.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SizeMessage2GroupedMessage : pb::GeneratedMessage<SizeMessage2GroupedMessage, SizeMessage2GroupedMessage.Builder> {
-    private SizeMessage2GroupedMessage() { }
-    private static readonly SizeMessage2GroupedMessage defaultInstance = new SizeMessage2GroupedMessage().MakeReadOnly();
-    public static SizeMessage2GroupedMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SizeMessage2GroupedMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SizeMessage2GroupedMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage2GroupedMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage2GroupedMessage, SizeMessage2GroupedMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSize.internal__static_benchmarks_SizeMessage2GroupedMessage__FieldAccessorTable; }
-    }
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private float field1_;
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public float Field1 {
-      get { return field1_; }
-    }
-
-    public const int Field2FieldNumber = 2;
-    private bool hasField2;
-    private float field2_;
-    public bool HasField2 {
-      get { return hasField2; }
-    }
-    public float Field2 {
-      get { return field2_; }
-    }
-
-    public const int Field3FieldNumber = 3;
-    private bool hasField3;
-    private float field3_;
-    public bool HasField3 {
-      get { return hasField3; }
-    }
-    public float Field3 {
-      get { return field3_; }
-    }
-
-    public const int Field4FieldNumber = 4;
-    private bool hasField4;
-    private bool field4_;
-    public bool HasField4 {
-      get { return hasField4; }
-    }
-    public bool Field4 {
-      get { return field4_; }
-    }
-
-    public const int Field5FieldNumber = 5;
-    private bool hasField5;
-    private bool field5_;
-    public bool HasField5 {
-      get { return hasField5; }
-    }
-    public bool Field5 {
-      get { return field5_; }
-    }
-
-    public const int Field6FieldNumber = 6;
-    private bool hasField6;
-    private bool field6_ = true;
-    public bool HasField6 {
-      get { return hasField6; }
-    }
-    public bool Field6 {
-      get { return field6_; }
-    }
-
-    public const int Field7FieldNumber = 7;
-    private bool hasField7;
-    private bool field7_;
-    public bool HasField7 {
-      get { return hasField7; }
-    }
-    public bool Field7 {
-      get { return field7_; }
-    }
-
-    public const int Field8FieldNumber = 8;
-    private bool hasField8;
-    private float field8_;
-    public bool HasField8 {
-      get { return hasField8; }
-    }
-    public float Field8 {
-      get { return field8_; }
-    }
-
-    public const int Field9FieldNumber = 9;
-    private bool hasField9;
-    private bool field9_;
-    public bool HasField9 {
-      get { return hasField9; }
-    }
-    public bool Field9 {
-      get { return field9_; }
-    }
-
-    public const int Field10FieldNumber = 10;
-    private bool hasField10;
-    private float field10_;
-    public bool HasField10 {
-      get { return hasField10; }
-    }
-    public float Field10 {
-      get { return field10_; }
-    }
-
-    public const int Field11FieldNumber = 11;
-    private bool hasField11;
-    private long field11_;
-    public bool HasField11 {
-      get { return hasField11; }
-    }
-    public long Field11 {
-      get { return field11_; }
-    }
-
-    public static SizeMessage2GroupedMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SizeMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SizeMessage2GroupedMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(SizeMessage2GroupedMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage2GroupedMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SizeMessage2GroupedMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SizeMessage2GroupedMessage result;
-
-      private SizeMessage2GroupedMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SizeMessage2GroupedMessage original = result;
-          result = new SizeMessage2GroupedMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SizeMessage2GroupedMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Descriptor; }
-      }
-
-      public override SizeMessage2GroupedMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.DefaultInstance; }
-      }
-
-      public override SizeMessage2GroupedMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public float Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(float value) {
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = 0F;
-        return this;
-      }
-
-      public bool HasField2 {
-        get { return result.hasField2; }
-      }
-      public float Field2 {
-        get { return result.Field2; }
-        set { SetField2(value); }
-      }
-      public Builder SetField2(float value) {
-        PrepareBuilder();
-        result.hasField2 = true;
-        result.field2_ = value;
-        return this;
-      }
-      public Builder ClearField2() {
-        PrepareBuilder();
-        result.hasField2 = false;
-        result.field2_ = 0F;
-        return this;
-      }
-
-      public bool HasField3 {
-        get { return result.hasField3; }
-      }
-      public float Field3 {
-        get { return result.Field3; }
-        set { SetField3(value); }
-      }
-      public Builder SetField3(float value) {
-        PrepareBuilder();
-        result.hasField3 = true;
-        result.field3_ = value;
-        return this;
-      }
-      public Builder ClearField3() {
-        PrepareBuilder();
-        result.hasField3 = false;
-        result.field3_ = 0F;
-        return this;
-      }
-
-      public bool HasField4 {
-        get { return result.hasField4; }
-      }
-      public bool Field4 {
-        get { return result.Field4; }
-        set { SetField4(value); }
-      }
-      public Builder SetField4(bool value) {
-        PrepareBuilder();
-        result.hasField4 = true;
-        result.field4_ = value;
-        return this;
-      }
-      public Builder ClearField4() {
-        PrepareBuilder();
-        result.hasField4 = false;
-        result.field4_ = false;
-        return this;
-      }
-
-      public bool HasField5 {
-        get { return result.hasField5; }
-      }
-      public bool Field5 {
-        get { return result.Field5; }
-        set { SetField5(value); }
-      }
-      public Builder SetField5(bool value) {
-        PrepareBuilder();
-        result.hasField5 = true;
-        result.field5_ = value;
-        return this;
-      }
-      public Builder ClearField5() {
-        PrepareBuilder();
-        result.hasField5 = false;
-        result.field5_ = false;
-        return this;
-      }
-
-      public bool HasField6 {
-        get { return result.hasField6; }
-      }
-      public bool Field6 {
-        get { return result.Field6; }
-        set { SetField6(value); }
-      }
-      public Builder SetField6(bool value) {
-        PrepareBuilder();
-        result.hasField6 = true;
-        result.field6_ = value;
-        return this;
-      }
-      public Builder ClearField6() {
-        PrepareBuilder();
-        result.hasField6 = false;
-        result.field6_ = true;
-        return this;
-      }
-
-      public bool HasField7 {
-        get { return result.hasField7; }
-      }
-      public bool Field7 {
-        get { return result.Field7; }
-        set { SetField7(value); }
-      }
-      public Builder SetField7(bool value) {
-        PrepareBuilder();
-        result.hasField7 = true;
-        result.field7_ = value;
-        return this;
-      }
-      public Builder ClearField7() {
-        PrepareBuilder();
-        result.hasField7 = false;
-        result.field7_ = false;
-        return this;
-      }
-
-      public bool HasField8 {
-        get { return result.hasField8; }
-      }
-      public float Field8 {
-        get { return result.Field8; }
-        set { SetField8(value); }
-      }
-      public Builder SetField8(float value) {
-        PrepareBuilder();
-        result.hasField8 = true;
-        result.field8_ = value;
-        return this;
-      }
-      public Builder ClearField8() {
-        PrepareBuilder();
-        result.hasField8 = false;
-        result.field8_ = 0F;
-        return this;
-      }
-
-      public bool HasField9 {
-        get { return result.hasField9; }
-      }
-      public bool Field9 {
-        get { return result.Field9; }
-        set { SetField9(value); }
-      }
-      public Builder SetField9(bool value) {
-        PrepareBuilder();
-        result.hasField9 = true;
-        result.field9_ = value;
-        return this;
-      }
-      public Builder ClearField9() {
-        PrepareBuilder();
-        result.hasField9 = false;
-        result.field9_ = false;
-        return this;
-      }
-
-      public bool HasField10 {
-        get { return result.hasField10; }
-      }
-      public float Field10 {
-        get { return result.Field10; }
-        set { SetField10(value); }
-      }
-      public Builder SetField10(float value) {
-        PrepareBuilder();
-        result.hasField10 = true;
-        result.field10_ = value;
-        return this;
-      }
-      public Builder ClearField10() {
-        PrepareBuilder();
-        result.hasField10 = false;
-        result.field10_ = 0F;
-        return this;
-      }
-
-      public bool HasField11 {
-        get { return result.hasField11; }
-      }
-      public long Field11 {
-        get { return result.Field11; }
-        set { SetField11(value); }
-      }
-      public Builder SetField11(long value) {
-        PrepareBuilder();
-        result.hasField11 = true;
-        result.field11_ = value;
-        return this;
-      }
-      public Builder ClearField11() {
-        PrepareBuilder();
-        result.hasField11 = false;
-        result.field11_ = 0L;
-        return this;
-      }
-    }
-    static SizeMessage2GroupedMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSize.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 0 - 6612
csharp/src/ProtocolBuffers.Test/TestProtos/GoogleSpeed.cs

@@ -1,6612 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google_speed.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class GoogleSpeed {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage1__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.Builder> internal__static_benchmarks_SpeedMessage1__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder> internal__static_benchmarks_SpeedMessage1SubMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage2__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Builder> internal__static_benchmarks_SpeedMessage2__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage2_Group1__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder> internal__static_benchmarks_SpeedMessage2_Group1__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage2GroupedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder> internal__static_benchmarks_SpeedMessage2GroupedMessage__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static GoogleSpeed() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "ChJnb29nbGVfc3BlZWQucHJvdG8SCmJlbmNobWFya3Mi+AYKDVNwZWVkTWVz", 
-            "c2FnZTESDgoGZmllbGQxGAEgAigJEg4KBmZpZWxkORgJIAEoCRIPCgdmaWVs", 
-            "ZDE4GBIgASgJEhYKB2ZpZWxkODAYUCABKAg6BWZhbHNlEhUKB2ZpZWxkODEY", 
-            "USABKAg6BHRydWUSDgoGZmllbGQyGAIgAigFEg4KBmZpZWxkMxgDIAIoBRIR", 
-            "CghmaWVsZDI4MBiYAiABKAUSEQoGZmllbGQ2GAYgASgFOgEwEg8KB2ZpZWxk", 
-            "MjIYFiABKAMSDgoGZmllbGQ0GAQgASgJEg4KBmZpZWxkNRgFIAMoBhIWCgdm", 
-            "aWVsZDU5GDsgASgIOgVmYWxzZRIOCgZmaWVsZDcYByABKAkSDwoHZmllbGQx", 
-            "NhgQIAEoBRIUCghmaWVsZDEzMBiCASABKAU6ATASFQoHZmllbGQxMhgMIAEo", 
-            "CDoEdHJ1ZRIVCgdmaWVsZDE3GBEgASgIOgR0cnVlEhUKB2ZpZWxkMTMYDSAB", 
-            "KAg6BHRydWUSFQoHZmllbGQxNBgOIAEoCDoEdHJ1ZRITCghmaWVsZDEwNBho", 
-            "IAEoBToBMBITCghmaWVsZDEwMBhkIAEoBToBMBITCghmaWVsZDEwMRhlIAEo", 
-            "BToBMBIQCghmaWVsZDEwMhhmIAEoCRIQCghmaWVsZDEwMxhnIAEoCRISCgdm", 
-            "aWVsZDI5GB0gASgFOgEwEhYKB2ZpZWxkMzAYHiABKAg6BWZhbHNlEhMKB2Zp", 
-            "ZWxkNjAYPCABKAU6Ai0xEhUKCGZpZWxkMjcxGI8CIAEoBToCLTESFQoIZmll", 
-            "bGQyNzIYkAIgASgFOgItMRIRCghmaWVsZDE1MBiWASABKAUSEgoHZmllbGQy", 
-            "MxgXIAEoBToBMBIWCgdmaWVsZDI0GBggASgIOgVmYWxzZRISCgdmaWVsZDI1", 
-            "GBkgASgFOgEwEjQKB2ZpZWxkMTUYDyABKAsyIy5iZW5jaG1hcmtzLlNwZWVk", 
-            "TWVzc2FnZTFTdWJNZXNzYWdlEg8KB2ZpZWxkNzgYTiABKAgSEgoHZmllbGQ2", 
-            "NxhDIAEoBToBMBIPCgdmaWVsZDY4GEQgASgFEhQKCGZpZWxkMTI4GIABIAEo", 
-            "BToBMBIoCghmaWVsZDEyORiBASABKAk6FXh4eHh4eHh4eHh4eHh4eHh4eHh4", 
-            "eBIUCghmaWVsZDEzMRiDASABKAU6ATAiogMKF1NwZWVkTWVzc2FnZTFTdWJN", 
-            "ZXNzYWdlEhEKBmZpZWxkMRgBIAEoBToBMBIRCgZmaWVsZDIYAiABKAU6ATAS", 
-            "EQoGZmllbGQzGAMgASgFOgEwEg8KB2ZpZWxkMTUYDyABKAkSFQoHZmllbGQx", 
-            "MhgMIAEoCDoEdHJ1ZRIPCgdmaWVsZDEzGA0gASgDEg8KB2ZpZWxkMTQYDiAB", 
-            "KAMSDwoHZmllbGQxNhgQIAEoBRISCgdmaWVsZDE5GBMgASgFOgEyEhUKB2Zp", 
-            "ZWxkMjAYFCABKAg6BHRydWUSFQoHZmllbGQyOBgcIAEoCDoEdHJ1ZRIPCgdm", 
-            "aWVsZDIxGBUgASgGEg8KB2ZpZWxkMjIYFiABKAUSFgoHZmllbGQyMxgXIAEo", 
-            "CDoFZmFsc2USGAoIZmllbGQyMDYYzgEgASgIOgVmYWxzZRIRCghmaWVsZDIw", 
-            "MxjLASABKAcSEQoIZmllbGQyMDQYzAEgASgFEhEKCGZpZWxkMjA1GM0BIAEo", 
-            "CRIRCghmaWVsZDIwNxjPASABKAQSEQoIZmllbGQzMDAYrAIgASgEIsoHCg1T", 
-            "cGVlZE1lc3NhZ2UyEg4KBmZpZWxkMRgBIAEoCRIOCgZmaWVsZDMYAyABKAMS", 
-            "DgoGZmllbGQ0GAQgASgDEg8KB2ZpZWxkMzAYHiABKAMSFgoHZmllbGQ3NRhL", 
-            "IAEoCDoFZmFsc2USDgoGZmllbGQ2GAYgASgJEg4KBmZpZWxkMhgCIAEoDBIS", 
-            "CgdmaWVsZDIxGBUgASgFOgEwEg8KB2ZpZWxkNzEYRyABKAUSDwoHZmllbGQy", 
-            "NRgZIAEoAhITCghmaWVsZDEwORhtIAEoBToBMBIUCghmaWVsZDIxMBjSASAB", 
-            "KAU6ATASFAoIZmllbGQyMTEY0wEgASgFOgEwEhQKCGZpZWxkMjEyGNQBIAEo", 
-            "BToBMBIUCghmaWVsZDIxMxjVASABKAU6ATASFAoIZmllbGQyMTYY2AEgASgF", 
-            "OgEwEhQKCGZpZWxkMjE3GNkBIAEoBToBMBIUCghmaWVsZDIxOBjaASABKAU6", 
-            "ATASFAoIZmllbGQyMjAY3AEgASgFOgEwEhQKCGZpZWxkMjIxGN0BIAEoBToB", 
-            "MBIUCghmaWVsZDIyMhjeASABKAI6ATASDwoHZmllbGQ2Mxg/IAEoBRIwCgZn", 
-            "cm91cDEYCiADKAoyIC5iZW5jaG1hcmtzLlNwZWVkTWVzc2FnZTIuR3JvdXAx", 
-            "EhEKCGZpZWxkMTI4GIABIAMoCRIRCghmaWVsZDEzMRiDASABKAMSEAoIZmll", 
-            "bGQxMjcYfyADKAkSEQoIZmllbGQxMjkYgQEgASgFEhEKCGZpZWxkMTMwGIIB", 
-            "IAMoAxIYCghmaWVsZDIwNRjNASABKAg6BWZhbHNlEhgKCGZpZWxkMjA2GM4B", 
-            "IAEoCDoFZmFsc2UawwIKBkdyb3VwMRIPCgdmaWVsZDExGAsgAigCEg8KB2Zp", 
-            "ZWxkMjYYGiABKAISDwoHZmllbGQxMhgMIAEoCRIPCgdmaWVsZDEzGA0gASgJ", 
-            "Eg8KB2ZpZWxkMTQYDiADKAkSDwoHZmllbGQxNRgPIAIoBBIOCgZmaWVsZDUY", 
-            "BSABKAUSDwoHZmllbGQyNxgbIAEoCRIPCgdmaWVsZDI4GBwgASgFEg8KB2Zp", 
-            "ZWxkMjkYHSABKAkSDwoHZmllbGQxNhgQIAEoCRIPCgdmaWVsZDIyGBYgAygJ", 
-            "Eg8KB2ZpZWxkNzMYSSADKAUSEgoHZmllbGQyMBgUIAEoBToBMBIPCgdmaWVs", 
-            "ZDI0GBggASgJEjgKB2ZpZWxkMzEYHyABKAsyJy5iZW5jaG1hcmtzLlNwZWVk", 
-            "TWVzc2FnZTJHcm91cGVkTWVzc2FnZSLfAQobU3BlZWRNZXNzYWdlMkdyb3Vw", 
-            "ZWRNZXNzYWdlEg4KBmZpZWxkMRgBIAEoAhIOCgZmaWVsZDIYAiABKAISEQoG", 
-            "ZmllbGQzGAMgASgCOgEwEg4KBmZpZWxkNBgEIAEoCBIOCgZmaWVsZDUYBSAB", 
-            "KAgSFAoGZmllbGQ2GAYgASgIOgR0cnVlEhUKBmZpZWxkNxgHIAEoCDoFZmFs", 
-            "c2USDgoGZmllbGQ4GAggASgCEg4KBmZpZWxkORgJIAEoCBIPCgdmaWVsZDEw", 
-            "GAogASgCEg8KB2ZpZWxkMTEYCyABKANCM0ILR29vZ2xlU3BlZWRIAaoCIUdv", 
-          "b2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVzdFByb3Rvcw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_benchmarks_SpeedMessage1__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_benchmarks_SpeedMessage1__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.Builder>(internal__static_benchmarks_SpeedMessage1__Descriptor,
-                new string[] { "Field1", "Field9", "Field18", "Field80", "Field81", "Field2", "Field3", "Field280", "Field6", "Field22", "Field4", "Field5", "Field59", "Field7", "Field16", "Field130", "Field12", "Field17", "Field13", "Field14", "Field104", "Field100", "Field101", "Field102", "Field103", "Field29", "Field30", "Field60", "Field271", "Field272", "Field150", "Field23", "Field24", "Field25", "Field15", "Field78", "Field67", "Field68", "Field128", "Field129", "Field131", });
-        internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_benchmarks_SpeedMessage1SubMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder>(internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor,
-                new string[] { "Field1", "Field2", "Field3", "Field15", "Field12", "Field13", "Field14", "Field16", "Field19", "Field20", "Field28", "Field21", "Field22", "Field23", "Field206", "Field203", "Field204", "Field205", "Field207", "Field300", });
-        internal__static_benchmarks_SpeedMessage2__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_benchmarks_SpeedMessage2__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Builder>(internal__static_benchmarks_SpeedMessage2__Descriptor,
-                new string[] { "Field1", "Field3", "Field4", "Field30", "Field75", "Field6", "Field2", "Field21", "Field71", "Field25", "Field109", "Field210", "Field211", "Field212", "Field213", "Field216", "Field217", "Field218", "Field220", "Field221", "Field222", "Field63", "Group1", "Field128", "Field131", "Field127", "Field129", "Field130", "Field205", "Field206", });
-        internal__static_benchmarks_SpeedMessage2_Group1__Descriptor = internal__static_benchmarks_SpeedMessage2__Descriptor.NestedTypes[0];
-        internal__static_benchmarks_SpeedMessage2_Group1__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder>(internal__static_benchmarks_SpeedMessage2_Group1__Descriptor,
-                new string[] { "Field11", "Field26", "Field12", "Field13", "Field14", "Field15", "Field5", "Field27", "Field28", "Field29", "Field16", "Field22", "Field73", "Field20", "Field24", "Field31", });
-        internal__static_benchmarks_SpeedMessage2GroupedMessage__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_benchmarks_SpeedMessage2GroupedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder>(internal__static_benchmarks_SpeedMessage2GroupedMessage__Descriptor,
-                new string[] { "Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8", "Field9", "Field10", "Field11", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SpeedMessage1 : pb::GeneratedMessage<SpeedMessage1, SpeedMessage1.Builder> {
-    private SpeedMessage1() { }
-    private static readonly SpeedMessage1 defaultInstance = new SpeedMessage1().MakeReadOnly();
-    private static readonly string[] _speedMessage1FieldNames = new string[] { "field1", "field100", "field101", "field102", "field103", "field104", "field12", "field128", "field129", "field13", "field130", "field131", "field14", "field15", "field150", "field16", "field17", "field18", "field2", "field22", "field23", "field24", "field25", "field271", "field272", "field280", "field29", "field3", "field30", "field4", "field5", "field59", "field6", "field60", "field67", "field68", "field7", "field78", "field80", "field81", "field9" };
-    private static readonly uint[] _speedMessage1FieldTags = new uint[] { 10, 800, 808, 818, 826, 832, 96, 1024, 1034, 104, 1040, 1048, 112, 122, 1200, 128, 136, 146, 16, 176, 184, 192, 200, 2168, 2176, 2240, 232, 24, 240, 34, 41, 472, 48, 480, 536, 544, 58, 624, 640, 648, 74 };
-    public static SpeedMessage1 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SpeedMessage1 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SpeedMessage1 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage1__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage1, SpeedMessage1.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage1__FieldAccessorTable; }
-    }
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private string field1_ = "";
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public string Field1 {
-      get { return field1_; }
-    }
-
-    public const int Field9FieldNumber = 9;
-    private bool hasField9;
-    private string field9_ = "";
-    public bool HasField9 {
-      get { return hasField9; }
-    }
-    public string Field9 {
-      get { return field9_; }
-    }
-
-    public const int Field18FieldNumber = 18;
-    private bool hasField18;
-    private string field18_ = "";
-    public bool HasField18 {
-      get { return hasField18; }
-    }
-    public string Field18 {
-      get { return field18_; }
-    }
-
-    public const int Field80FieldNumber = 80;
-    private bool hasField80;
-    private bool field80_;
-    public bool HasField80 {
-      get { return hasField80; }
-    }
-    public bool Field80 {
-      get { return field80_; }
-    }
-
-    public const int Field81FieldNumber = 81;
-    private bool hasField81;
-    private bool field81_ = true;
-    public bool HasField81 {
-      get { return hasField81; }
-    }
-    public bool Field81 {
-      get { return field81_; }
-    }
-
-    public const int Field2FieldNumber = 2;
-    private bool hasField2;
-    private int field2_;
-    public bool HasField2 {
-      get { return hasField2; }
-    }
-    public int Field2 {
-      get { return field2_; }
-    }
-
-    public const int Field3FieldNumber = 3;
-    private bool hasField3;
-    private int field3_;
-    public bool HasField3 {
-      get { return hasField3; }
-    }
-    public int Field3 {
-      get { return field3_; }
-    }
-
-    public const int Field280FieldNumber = 280;
-    private bool hasField280;
-    private int field280_;
-    public bool HasField280 {
-      get { return hasField280; }
-    }
-    public int Field280 {
-      get { return field280_; }
-    }
-
-    public const int Field6FieldNumber = 6;
-    private bool hasField6;
-    private int field6_;
-    public bool HasField6 {
-      get { return hasField6; }
-    }
-    public int Field6 {
-      get { return field6_; }
-    }
-
-    public const int Field22FieldNumber = 22;
-    private bool hasField22;
-    private long field22_;
-    public bool HasField22 {
-      get { return hasField22; }
-    }
-    public long Field22 {
-      get { return field22_; }
-    }
-
-    public const int Field4FieldNumber = 4;
-    private bool hasField4;
-    private string field4_ = "";
-    public bool HasField4 {
-      get { return hasField4; }
-    }
-    public string Field4 {
-      get { return field4_; }
-    }
-
-    public const int Field5FieldNumber = 5;
-    private pbc::PopsicleList<ulong> field5_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> Field5List {
-      get { return pbc::Lists.AsReadOnly(field5_); }
-    }
-    public int Field5Count {
-      get { return field5_.Count; }
-    }
-    public ulong GetField5(int index) {
-      return field5_[index];
-    }
-
-    public const int Field59FieldNumber = 59;
-    private bool hasField59;
-    private bool field59_;
-    public bool HasField59 {
-      get { return hasField59; }
-    }
-    public bool Field59 {
-      get { return field59_; }
-    }
-
-    public const int Field7FieldNumber = 7;
-    private bool hasField7;
-    private string field7_ = "";
-    public bool HasField7 {
-      get { return hasField7; }
-    }
-    public string Field7 {
-      get { return field7_; }
-    }
-
-    public const int Field16FieldNumber = 16;
-    private bool hasField16;
-    private int field16_;
-    public bool HasField16 {
-      get { return hasField16; }
-    }
-    public int Field16 {
-      get { return field16_; }
-    }
-
-    public const int Field130FieldNumber = 130;
-    private bool hasField130;
-    private int field130_;
-    public bool HasField130 {
-      get { return hasField130; }
-    }
-    public int Field130 {
-      get { return field130_; }
-    }
-
-    public const int Field12FieldNumber = 12;
-    private bool hasField12;
-    private bool field12_ = true;
-    public bool HasField12 {
-      get { return hasField12; }
-    }
-    public bool Field12 {
-      get { return field12_; }
-    }
-
-    public const int Field17FieldNumber = 17;
-    private bool hasField17;
-    private bool field17_ = true;
-    public bool HasField17 {
-      get { return hasField17; }
-    }
-    public bool Field17 {
-      get { return field17_; }
-    }
-
-    public const int Field13FieldNumber = 13;
-    private bool hasField13;
-    private bool field13_ = true;
-    public bool HasField13 {
-      get { return hasField13; }
-    }
-    public bool Field13 {
-      get { return field13_; }
-    }
-
-    public const int Field14FieldNumber = 14;
-    private bool hasField14;
-    private bool field14_ = true;
-    public bool HasField14 {
-      get { return hasField14; }
-    }
-    public bool Field14 {
-      get { return field14_; }
-    }
-
-    public const int Field104FieldNumber = 104;
-    private bool hasField104;
-    private int field104_;
-    public bool HasField104 {
-      get { return hasField104; }
-    }
-    public int Field104 {
-      get { return field104_; }
-    }
-
-    public const int Field100FieldNumber = 100;
-    private bool hasField100;
-    private int field100_;
-    public bool HasField100 {
-      get { return hasField100; }
-    }
-    public int Field100 {
-      get { return field100_; }
-    }
-
-    public const int Field101FieldNumber = 101;
-    private bool hasField101;
-    private int field101_;
-    public bool HasField101 {
-      get { return hasField101; }
-    }
-    public int Field101 {
-      get { return field101_; }
-    }
-
-    public const int Field102FieldNumber = 102;
-    private bool hasField102;
-    private string field102_ = "";
-    public bool HasField102 {
-      get { return hasField102; }
-    }
-    public string Field102 {
-      get { return field102_; }
-    }
-
-    public const int Field103FieldNumber = 103;
-    private bool hasField103;
-    private string field103_ = "";
-    public bool HasField103 {
-      get { return hasField103; }
-    }
-    public string Field103 {
-      get { return field103_; }
-    }
-
-    public const int Field29FieldNumber = 29;
-    private bool hasField29;
-    private int field29_;
-    public bool HasField29 {
-      get { return hasField29; }
-    }
-    public int Field29 {
-      get { return field29_; }
-    }
-
-    public const int Field30FieldNumber = 30;
-    private bool hasField30;
-    private bool field30_;
-    public bool HasField30 {
-      get { return hasField30; }
-    }
-    public bool Field30 {
-      get { return field30_; }
-    }
-
-    public const int Field60FieldNumber = 60;
-    private bool hasField60;
-    private int field60_ = -1;
-    public bool HasField60 {
-      get { return hasField60; }
-    }
-    public int Field60 {
-      get { return field60_; }
-    }
-
-    public const int Field271FieldNumber = 271;
-    private bool hasField271;
-    private int field271_ = -1;
-    public bool HasField271 {
-      get { return hasField271; }
-    }
-    public int Field271 {
-      get { return field271_; }
-    }
-
-    public const int Field272FieldNumber = 272;
-    private bool hasField272;
-    private int field272_ = -1;
-    public bool HasField272 {
-      get { return hasField272; }
-    }
-    public int Field272 {
-      get { return field272_; }
-    }
-
-    public const int Field150FieldNumber = 150;
-    private bool hasField150;
-    private int field150_;
-    public bool HasField150 {
-      get { return hasField150; }
-    }
-    public int Field150 {
-      get { return field150_; }
-    }
-
-    public const int Field23FieldNumber = 23;
-    private bool hasField23;
-    private int field23_;
-    public bool HasField23 {
-      get { return hasField23; }
-    }
-    public int Field23 {
-      get { return field23_; }
-    }
-
-    public const int Field24FieldNumber = 24;
-    private bool hasField24;
-    private bool field24_;
-    public bool HasField24 {
-      get { return hasField24; }
-    }
-    public bool Field24 {
-      get { return field24_; }
-    }
-
-    public const int Field25FieldNumber = 25;
-    private bool hasField25;
-    private int field25_;
-    public bool HasField25 {
-      get { return hasField25; }
-    }
-    public int Field25 {
-      get { return field25_; }
-    }
-
-    public const int Field15FieldNumber = 15;
-    private bool hasField15;
-    private global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage field15_;
-    public bool HasField15 {
-      get { return hasField15; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage Field15 {
-      get { return field15_ ?? global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance; }
-    }
-
-    public const int Field78FieldNumber = 78;
-    private bool hasField78;
-    private bool field78_;
-    public bool HasField78 {
-      get { return hasField78; }
-    }
-    public bool Field78 {
-      get { return field78_; }
-    }
-
-    public const int Field67FieldNumber = 67;
-    private bool hasField67;
-    private int field67_;
-    public bool HasField67 {
-      get { return hasField67; }
-    }
-    public int Field67 {
-      get { return field67_; }
-    }
-
-    public const int Field68FieldNumber = 68;
-    private bool hasField68;
-    private int field68_;
-    public bool HasField68 {
-      get { return hasField68; }
-    }
-    public int Field68 {
-      get { return field68_; }
-    }
-
-    public const int Field128FieldNumber = 128;
-    private bool hasField128;
-    private int field128_;
-    public bool HasField128 {
-      get { return hasField128; }
-    }
-    public int Field128 {
-      get { return field128_; }
-    }
-
-    public const int Field129FieldNumber = 129;
-    private bool hasField129;
-    private string field129_ = "xxxxxxxxxxxxxxxxxxxxx";
-    public bool HasField129 {
-      get { return hasField129; }
-    }
-    public string Field129 {
-      get { return field129_; }
-    }
-
-    public const int Field131FieldNumber = 131;
-    private bool hasField131;
-    private int field131_;
-    public bool HasField131 {
-      get { return hasField131; }
-    }
-    public int Field131 {
-      get { return field131_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!hasField1) return false;
-        if (!hasField2) return false;
-        if (!hasField3) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _speedMessage1FieldNames;
-      if (hasField1) {
-        output.WriteString(1, field_names[0], Field1);
-      }
-      if (hasField2) {
-        output.WriteInt32(2, field_names[18], Field2);
-      }
-      if (hasField3) {
-        output.WriteInt32(3, field_names[27], Field3);
-      }
-      if (hasField4) {
-        output.WriteString(4, field_names[29], Field4);
-      }
-      if (field5_.Count > 0) {
-        output.WriteFixed64Array(5, field_names[30], field5_);
-      }
-      if (hasField6) {
-        output.WriteInt32(6, field_names[32], Field6);
-      }
-      if (hasField7) {
-        output.WriteString(7, field_names[36], Field7);
-      }
-      if (hasField9) {
-        output.WriteString(9, field_names[40], Field9);
-      }
-      if (hasField12) {
-        output.WriteBool(12, field_names[6], Field12);
-      }
-      if (hasField13) {
-        output.WriteBool(13, field_names[9], Field13);
-      }
-      if (hasField14) {
-        output.WriteBool(14, field_names[12], Field14);
-      }
-      if (hasField15) {
-        output.WriteMessage(15, field_names[13], Field15);
-      }
-      if (hasField16) {
-        output.WriteInt32(16, field_names[15], Field16);
-      }
-      if (hasField17) {
-        output.WriteBool(17, field_names[16], Field17);
-      }
-      if (hasField18) {
-        output.WriteString(18, field_names[17], Field18);
-      }
-      if (hasField22) {
-        output.WriteInt64(22, field_names[19], Field22);
-      }
-      if (hasField23) {
-        output.WriteInt32(23, field_names[20], Field23);
-      }
-      if (hasField24) {
-        output.WriteBool(24, field_names[21], Field24);
-      }
-      if (hasField25) {
-        output.WriteInt32(25, field_names[22], Field25);
-      }
-      if (hasField29) {
-        output.WriteInt32(29, field_names[26], Field29);
-      }
-      if (hasField30) {
-        output.WriteBool(30, field_names[28], Field30);
-      }
-      if (hasField59) {
-        output.WriteBool(59, field_names[31], Field59);
-      }
-      if (hasField60) {
-        output.WriteInt32(60, field_names[33], Field60);
-      }
-      if (hasField67) {
-        output.WriteInt32(67, field_names[34], Field67);
-      }
-      if (hasField68) {
-        output.WriteInt32(68, field_names[35], Field68);
-      }
-      if (hasField78) {
-        output.WriteBool(78, field_names[37], Field78);
-      }
-      if (hasField80) {
-        output.WriteBool(80, field_names[38], Field80);
-      }
-      if (hasField81) {
-        output.WriteBool(81, field_names[39], Field81);
-      }
-      if (hasField100) {
-        output.WriteInt32(100, field_names[1], Field100);
-      }
-      if (hasField101) {
-        output.WriteInt32(101, field_names[2], Field101);
-      }
-      if (hasField102) {
-        output.WriteString(102, field_names[3], Field102);
-      }
-      if (hasField103) {
-        output.WriteString(103, field_names[4], Field103);
-      }
-      if (hasField104) {
-        output.WriteInt32(104, field_names[5], Field104);
-      }
-      if (hasField128) {
-        output.WriteInt32(128, field_names[7], Field128);
-      }
-      if (hasField129) {
-        output.WriteString(129, field_names[8], Field129);
-      }
-      if (hasField130) {
-        output.WriteInt32(130, field_names[10], Field130);
-      }
-      if (hasField131) {
-        output.WriteInt32(131, field_names[11], Field131);
-      }
-      if (hasField150) {
-        output.WriteInt32(150, field_names[14], Field150);
-      }
-      if (hasField271) {
-        output.WriteInt32(271, field_names[23], Field271);
-      }
-      if (hasField272) {
-        output.WriteInt32(272, field_names[24], Field272);
-      }
-      if (hasField280) {
-        output.WriteInt32(280, field_names[25], Field280);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasField1) {
-        size += pb::CodedOutputStream.ComputeStringSize(1, Field1);
-      }
-      if (hasField9) {
-        size += pb::CodedOutputStream.ComputeStringSize(9, Field9);
-      }
-      if (hasField18) {
-        size += pb::CodedOutputStream.ComputeStringSize(18, Field18);
-      }
-      if (hasField80) {
-        size += pb::CodedOutputStream.ComputeBoolSize(80, Field80);
-      }
-      if (hasField81) {
-        size += pb::CodedOutputStream.ComputeBoolSize(81, Field81);
-      }
-      if (hasField2) {
-        size += pb::CodedOutputStream.ComputeInt32Size(2, Field2);
-      }
-      if (hasField3) {
-        size += pb::CodedOutputStream.ComputeInt32Size(3, Field3);
-      }
-      if (hasField280) {
-        size += pb::CodedOutputStream.ComputeInt32Size(280, Field280);
-      }
-      if (hasField6) {
-        size += pb::CodedOutputStream.ComputeInt32Size(6, Field6);
-      }
-      if (hasField22) {
-        size += pb::CodedOutputStream.ComputeInt64Size(22, Field22);
-      }
-      if (hasField4) {
-        size += pb::CodedOutputStream.ComputeStringSize(4, Field4);
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * field5_.Count;
-        size += dataSize;
-        size += 1 * field5_.Count;
-      }
-      if (hasField59) {
-        size += pb::CodedOutputStream.ComputeBoolSize(59, Field59);
-      }
-      if (hasField7) {
-        size += pb::CodedOutputStream.ComputeStringSize(7, Field7);
-      }
-      if (hasField16) {
-        size += pb::CodedOutputStream.ComputeInt32Size(16, Field16);
-      }
-      if (hasField130) {
-        size += pb::CodedOutputStream.ComputeInt32Size(130, Field130);
-      }
-      if (hasField12) {
-        size += pb::CodedOutputStream.ComputeBoolSize(12, Field12);
-      }
-      if (hasField17) {
-        size += pb::CodedOutputStream.ComputeBoolSize(17, Field17);
-      }
-      if (hasField13) {
-        size += pb::CodedOutputStream.ComputeBoolSize(13, Field13);
-      }
-      if (hasField14) {
-        size += pb::CodedOutputStream.ComputeBoolSize(14, Field14);
-      }
-      if (hasField104) {
-        size += pb::CodedOutputStream.ComputeInt32Size(104, Field104);
-      }
-      if (hasField100) {
-        size += pb::CodedOutputStream.ComputeInt32Size(100, Field100);
-      }
-      if (hasField101) {
-        size += pb::CodedOutputStream.ComputeInt32Size(101, Field101);
-      }
-      if (hasField102) {
-        size += pb::CodedOutputStream.ComputeStringSize(102, Field102);
-      }
-      if (hasField103) {
-        size += pb::CodedOutputStream.ComputeStringSize(103, Field103);
-      }
-      if (hasField29) {
-        size += pb::CodedOutputStream.ComputeInt32Size(29, Field29);
-      }
-      if (hasField30) {
-        size += pb::CodedOutputStream.ComputeBoolSize(30, Field30);
-      }
-      if (hasField60) {
-        size += pb::CodedOutputStream.ComputeInt32Size(60, Field60);
-      }
-      if (hasField271) {
-        size += pb::CodedOutputStream.ComputeInt32Size(271, Field271);
-      }
-      if (hasField272) {
-        size += pb::CodedOutputStream.ComputeInt32Size(272, Field272);
-      }
-      if (hasField150) {
-        size += pb::CodedOutputStream.ComputeInt32Size(150, Field150);
-      }
-      if (hasField23) {
-        size += pb::CodedOutputStream.ComputeInt32Size(23, Field23);
-      }
-      if (hasField24) {
-        size += pb::CodedOutputStream.ComputeBoolSize(24, Field24);
-      }
-      if (hasField25) {
-        size += pb::CodedOutputStream.ComputeInt32Size(25, Field25);
-      }
-      if (hasField15) {
-        size += pb::CodedOutputStream.ComputeMessageSize(15, Field15);
-      }
-      if (hasField78) {
-        size += pb::CodedOutputStream.ComputeBoolSize(78, Field78);
-      }
-      if (hasField67) {
-        size += pb::CodedOutputStream.ComputeInt32Size(67, Field67);
-      }
-      if (hasField68) {
-        size += pb::CodedOutputStream.ComputeInt32Size(68, Field68);
-      }
-      if (hasField128) {
-        size += pb::CodedOutputStream.ComputeInt32Size(128, Field128);
-      }
-      if (hasField129) {
-        size += pb::CodedOutputStream.ComputeStringSize(129, Field129);
-      }
-      if (hasField131) {
-        size += pb::CodedOutputStream.ComputeInt32Size(131, Field131);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static SpeedMessage1 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SpeedMessage1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage1 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SpeedMessage1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage1 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SpeedMessage1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage1 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SpeedMessage1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SpeedMessage1 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SpeedMessage1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SpeedMessage1 MakeReadOnly() {
-      field5_.MakeReadOnly();
-      return this;
-    }
-
-    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(SpeedMessage1 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage1, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SpeedMessage1 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SpeedMessage1 result;
-
-      private SpeedMessage1 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SpeedMessage1 original = result;
-          result = new SpeedMessage1();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SpeedMessage1 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.Descriptor; }
-      }
-
-      public override SpeedMessage1 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.DefaultInstance; }
-      }
-
-      public override SpeedMessage1 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is SpeedMessage1) {
-          return MergeFrom((SpeedMessage1) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(SpeedMessage1 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasField1) {
-          Field1 = other.Field1;
-        }
-        if (other.HasField9) {
-          Field9 = other.Field9;
-        }
-        if (other.HasField18) {
-          Field18 = other.Field18;
-        }
-        if (other.HasField80) {
-          Field80 = other.Field80;
-        }
-        if (other.HasField81) {
-          Field81 = other.Field81;
-        }
-        if (other.HasField2) {
-          Field2 = other.Field2;
-        }
-        if (other.HasField3) {
-          Field3 = other.Field3;
-        }
-        if (other.HasField280) {
-          Field280 = other.Field280;
-        }
-        if (other.HasField6) {
-          Field6 = other.Field6;
-        }
-        if (other.HasField22) {
-          Field22 = other.Field22;
-        }
-        if (other.HasField4) {
-          Field4 = other.Field4;
-        }
-        if (other.field5_.Count != 0) {
-          result.field5_.Add(other.field5_);
-        }
-        if (other.HasField59) {
-          Field59 = other.Field59;
-        }
-        if (other.HasField7) {
-          Field7 = other.Field7;
-        }
-        if (other.HasField16) {
-          Field16 = other.Field16;
-        }
-        if (other.HasField130) {
-          Field130 = other.Field130;
-        }
-        if (other.HasField12) {
-          Field12 = other.Field12;
-        }
-        if (other.HasField17) {
-          Field17 = other.Field17;
-        }
-        if (other.HasField13) {
-          Field13 = other.Field13;
-        }
-        if (other.HasField14) {
-          Field14 = other.Field14;
-        }
-        if (other.HasField104) {
-          Field104 = other.Field104;
-        }
-        if (other.HasField100) {
-          Field100 = other.Field100;
-        }
-        if (other.HasField101) {
-          Field101 = other.Field101;
-        }
-        if (other.HasField102) {
-          Field102 = other.Field102;
-        }
-        if (other.HasField103) {
-          Field103 = other.Field103;
-        }
-        if (other.HasField29) {
-          Field29 = other.Field29;
-        }
-        if (other.HasField30) {
-          Field30 = other.Field30;
-        }
-        if (other.HasField60) {
-          Field60 = other.Field60;
-        }
-        if (other.HasField271) {
-          Field271 = other.Field271;
-        }
-        if (other.HasField272) {
-          Field272 = other.Field272;
-        }
-        if (other.HasField150) {
-          Field150 = other.Field150;
-        }
-        if (other.HasField23) {
-          Field23 = other.Field23;
-        }
-        if (other.HasField24) {
-          Field24 = other.Field24;
-        }
-        if (other.HasField25) {
-          Field25 = other.Field25;
-        }
-        if (other.HasField15) {
-          MergeField15(other.Field15);
-        }
-        if (other.HasField78) {
-          Field78 = other.Field78;
-        }
-        if (other.HasField67) {
-          Field67 = other.Field67;
-        }
-        if (other.HasField68) {
-          Field68 = other.Field68;
-        }
-        if (other.HasField128) {
-          Field128 = other.Field128;
-        }
-        if (other.HasField129) {
-          Field129 = other.Field129;
-        }
-        if (other.HasField131) {
-          Field131 = other.Field131;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_speedMessage1FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _speedMessage1FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              result.hasField1 = input.ReadString(ref result.field1_);
-              break;
-            }
-            case 16: {
-              result.hasField2 = input.ReadInt32(ref result.field2_);
-              break;
-            }
-            case 24: {
-              result.hasField3 = input.ReadInt32(ref result.field3_);
-              break;
-            }
-            case 34: {
-              result.hasField4 = input.ReadString(ref result.field4_);
-              break;
-            }
-            case 42:
-            case 41: {
-              input.ReadFixed64Array(tag, field_name, result.field5_);
-              break;
-            }
-            case 48: {
-              result.hasField6 = input.ReadInt32(ref result.field6_);
-              break;
-            }
-            case 58: {
-              result.hasField7 = input.ReadString(ref result.field7_);
-              break;
-            }
-            case 74: {
-              result.hasField9 = input.ReadString(ref result.field9_);
-              break;
-            }
-            case 96: {
-              result.hasField12 = input.ReadBool(ref result.field12_);
-              break;
-            }
-            case 104: {
-              result.hasField13 = input.ReadBool(ref result.field13_);
-              break;
-            }
-            case 112: {
-              result.hasField14 = input.ReadBool(ref result.field14_);
-              break;
-            }
-            case 122: {
-              global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.CreateBuilder();
-              if (result.hasField15) {
-                subBuilder.MergeFrom(Field15);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Field15 = subBuilder.BuildPartial();
-              break;
-            }
-            case 128: {
-              result.hasField16 = input.ReadInt32(ref result.field16_);
-              break;
-            }
-            case 136: {
-              result.hasField17 = input.ReadBool(ref result.field17_);
-              break;
-            }
-            case 146: {
-              result.hasField18 = input.ReadString(ref result.field18_);
-              break;
-            }
-            case 176: {
-              result.hasField22 = input.ReadInt64(ref result.field22_);
-              break;
-            }
-            case 184: {
-              result.hasField23 = input.ReadInt32(ref result.field23_);
-              break;
-            }
-            case 192: {
-              result.hasField24 = input.ReadBool(ref result.field24_);
-              break;
-            }
-            case 200: {
-              result.hasField25 = input.ReadInt32(ref result.field25_);
-              break;
-            }
-            case 232: {
-              result.hasField29 = input.ReadInt32(ref result.field29_);
-              break;
-            }
-            case 240: {
-              result.hasField30 = input.ReadBool(ref result.field30_);
-              break;
-            }
-            case 472: {
-              result.hasField59 = input.ReadBool(ref result.field59_);
-              break;
-            }
-            case 480: {
-              result.hasField60 = input.ReadInt32(ref result.field60_);
-              break;
-            }
-            case 536: {
-              result.hasField67 = input.ReadInt32(ref result.field67_);
-              break;
-            }
-            case 544: {
-              result.hasField68 = input.ReadInt32(ref result.field68_);
-              break;
-            }
-            case 624: {
-              result.hasField78 = input.ReadBool(ref result.field78_);
-              break;
-            }
-            case 640: {
-              result.hasField80 = input.ReadBool(ref result.field80_);
-              break;
-            }
-            case 648: {
-              result.hasField81 = input.ReadBool(ref result.field81_);
-              break;
-            }
-            case 800: {
-              result.hasField100 = input.ReadInt32(ref result.field100_);
-              break;
-            }
-            case 808: {
-              result.hasField101 = input.ReadInt32(ref result.field101_);
-              break;
-            }
-            case 818: {
-              result.hasField102 = input.ReadString(ref result.field102_);
-              break;
-            }
-            case 826: {
-              result.hasField103 = input.ReadString(ref result.field103_);
-              break;
-            }
-            case 832: {
-              result.hasField104 = input.ReadInt32(ref result.field104_);
-              break;
-            }
-            case 1024: {
-              result.hasField128 = input.ReadInt32(ref result.field128_);
-              break;
-            }
-            case 1034: {
-              result.hasField129 = input.ReadString(ref result.field129_);
-              break;
-            }
-            case 1040: {
-              result.hasField130 = input.ReadInt32(ref result.field130_);
-              break;
-            }
-            case 1048: {
-              result.hasField131 = input.ReadInt32(ref result.field131_);
-              break;
-            }
-            case 1200: {
-              result.hasField150 = input.ReadInt32(ref result.field150_);
-              break;
-            }
-            case 2168: {
-              result.hasField271 = input.ReadInt32(ref result.field271_);
-              break;
-            }
-            case 2176: {
-              result.hasField272 = input.ReadInt32(ref result.field272_);
-              break;
-            }
-            case 2240: {
-              result.hasField280 = input.ReadInt32(ref result.field280_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public string Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = "";
-        return this;
-      }
-
-      public bool HasField9 {
-        get { return result.hasField9; }
-      }
-      public string Field9 {
-        get { return result.Field9; }
-        set { SetField9(value); }
-      }
-      public Builder SetField9(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField9 = true;
-        result.field9_ = value;
-        return this;
-      }
-      public Builder ClearField9() {
-        PrepareBuilder();
-        result.hasField9 = false;
-        result.field9_ = "";
-        return this;
-      }
-
-      public bool HasField18 {
-        get { return result.hasField18; }
-      }
-      public string Field18 {
-        get { return result.Field18; }
-        set { SetField18(value); }
-      }
-      public Builder SetField18(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField18 = true;
-        result.field18_ = value;
-        return this;
-      }
-      public Builder ClearField18() {
-        PrepareBuilder();
-        result.hasField18 = false;
-        result.field18_ = "";
-        return this;
-      }
-
-      public bool HasField80 {
-        get { return result.hasField80; }
-      }
-      public bool Field80 {
-        get { return result.Field80; }
-        set { SetField80(value); }
-      }
-      public Builder SetField80(bool value) {
-        PrepareBuilder();
-        result.hasField80 = true;
-        result.field80_ = value;
-        return this;
-      }
-      public Builder ClearField80() {
-        PrepareBuilder();
-        result.hasField80 = false;
-        result.field80_ = false;
-        return this;
-      }
-
-      public bool HasField81 {
-        get { return result.hasField81; }
-      }
-      public bool Field81 {
-        get { return result.Field81; }
-        set { SetField81(value); }
-      }
-      public Builder SetField81(bool value) {
-        PrepareBuilder();
-        result.hasField81 = true;
-        result.field81_ = value;
-        return this;
-      }
-      public Builder ClearField81() {
-        PrepareBuilder();
-        result.hasField81 = false;
-        result.field81_ = true;
-        return this;
-      }
-
-      public bool HasField2 {
-        get { return result.hasField2; }
-      }
-      public int Field2 {
-        get { return result.Field2; }
-        set { SetField2(value); }
-      }
-      public Builder SetField2(int value) {
-        PrepareBuilder();
-        result.hasField2 = true;
-        result.field2_ = value;
-        return this;
-      }
-      public Builder ClearField2() {
-        PrepareBuilder();
-        result.hasField2 = false;
-        result.field2_ = 0;
-        return this;
-      }
-
-      public bool HasField3 {
-        get { return result.hasField3; }
-      }
-      public int Field3 {
-        get { return result.Field3; }
-        set { SetField3(value); }
-      }
-      public Builder SetField3(int value) {
-        PrepareBuilder();
-        result.hasField3 = true;
-        result.field3_ = value;
-        return this;
-      }
-      public Builder ClearField3() {
-        PrepareBuilder();
-        result.hasField3 = false;
-        result.field3_ = 0;
-        return this;
-      }
-
-      public bool HasField280 {
-        get { return result.hasField280; }
-      }
-      public int Field280 {
-        get { return result.Field280; }
-        set { SetField280(value); }
-      }
-      public Builder SetField280(int value) {
-        PrepareBuilder();
-        result.hasField280 = true;
-        result.field280_ = value;
-        return this;
-      }
-      public Builder ClearField280() {
-        PrepareBuilder();
-        result.hasField280 = false;
-        result.field280_ = 0;
-        return this;
-      }
-
-      public bool HasField6 {
-        get { return result.hasField6; }
-      }
-      public int Field6 {
-        get { return result.Field6; }
-        set { SetField6(value); }
-      }
-      public Builder SetField6(int value) {
-        PrepareBuilder();
-        result.hasField6 = true;
-        result.field6_ = value;
-        return this;
-      }
-      public Builder ClearField6() {
-        PrepareBuilder();
-        result.hasField6 = false;
-        result.field6_ = 0;
-        return this;
-      }
-
-      public bool HasField22 {
-        get { return result.hasField22; }
-      }
-      public long Field22 {
-        get { return result.Field22; }
-        set { SetField22(value); }
-      }
-      public Builder SetField22(long value) {
-        PrepareBuilder();
-        result.hasField22 = true;
-        result.field22_ = value;
-        return this;
-      }
-      public Builder ClearField22() {
-        PrepareBuilder();
-        result.hasField22 = false;
-        result.field22_ = 0L;
-        return this;
-      }
-
-      public bool HasField4 {
-        get { return result.hasField4; }
-      }
-      public string Field4 {
-        get { return result.Field4; }
-        set { SetField4(value); }
-      }
-      public Builder SetField4(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField4 = true;
-        result.field4_ = value;
-        return this;
-      }
-      public Builder ClearField4() {
-        PrepareBuilder();
-        result.hasField4 = false;
-        result.field4_ = "";
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> Field5List {
-        get { return PrepareBuilder().field5_; }
-      }
-      public int Field5Count {
-        get { return result.Field5Count; }
-      }
-      public ulong GetField5(int index) {
-        return result.GetField5(index);
-      }
-      public Builder SetField5(int index, ulong value) {
-        PrepareBuilder();
-        result.field5_[index] = value;
-        return this;
-      }
-      public Builder AddField5(ulong value) {
-        PrepareBuilder();
-        result.field5_.Add(value);
-        return this;
-      }
-      public Builder AddRangeField5(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.field5_.Add(values);
-        return this;
-      }
-      public Builder ClearField5() {
-        PrepareBuilder();
-        result.field5_.Clear();
-        return this;
-      }
-
-      public bool HasField59 {
-        get { return result.hasField59; }
-      }
-      public bool Field59 {
-        get { return result.Field59; }
-        set { SetField59(value); }
-      }
-      public Builder SetField59(bool value) {
-        PrepareBuilder();
-        result.hasField59 = true;
-        result.field59_ = value;
-        return this;
-      }
-      public Builder ClearField59() {
-        PrepareBuilder();
-        result.hasField59 = false;
-        result.field59_ = false;
-        return this;
-      }
-
-      public bool HasField7 {
-        get { return result.hasField7; }
-      }
-      public string Field7 {
-        get { return result.Field7; }
-        set { SetField7(value); }
-      }
-      public Builder SetField7(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField7 = true;
-        result.field7_ = value;
-        return this;
-      }
-      public Builder ClearField7() {
-        PrepareBuilder();
-        result.hasField7 = false;
-        result.field7_ = "";
-        return this;
-      }
-
-      public bool HasField16 {
-        get { return result.hasField16; }
-      }
-      public int Field16 {
-        get { return result.Field16; }
-        set { SetField16(value); }
-      }
-      public Builder SetField16(int value) {
-        PrepareBuilder();
-        result.hasField16 = true;
-        result.field16_ = value;
-        return this;
-      }
-      public Builder ClearField16() {
-        PrepareBuilder();
-        result.hasField16 = false;
-        result.field16_ = 0;
-        return this;
-      }
-
-      public bool HasField130 {
-        get { return result.hasField130; }
-      }
-      public int Field130 {
-        get { return result.Field130; }
-        set { SetField130(value); }
-      }
-      public Builder SetField130(int value) {
-        PrepareBuilder();
-        result.hasField130 = true;
-        result.field130_ = value;
-        return this;
-      }
-      public Builder ClearField130() {
-        PrepareBuilder();
-        result.hasField130 = false;
-        result.field130_ = 0;
-        return this;
-      }
-
-      public bool HasField12 {
-        get { return result.hasField12; }
-      }
-      public bool Field12 {
-        get { return result.Field12; }
-        set { SetField12(value); }
-      }
-      public Builder SetField12(bool value) {
-        PrepareBuilder();
-        result.hasField12 = true;
-        result.field12_ = value;
-        return this;
-      }
-      public Builder ClearField12() {
-        PrepareBuilder();
-        result.hasField12 = false;
-        result.field12_ = true;
-        return this;
-      }
-
-      public bool HasField17 {
-        get { return result.hasField17; }
-      }
-      public bool Field17 {
-        get { return result.Field17; }
-        set { SetField17(value); }
-      }
-      public Builder SetField17(bool value) {
-        PrepareBuilder();
-        result.hasField17 = true;
-        result.field17_ = value;
-        return this;
-      }
-      public Builder ClearField17() {
-        PrepareBuilder();
-        result.hasField17 = false;
-        result.field17_ = true;
-        return this;
-      }
-
-      public bool HasField13 {
-        get { return result.hasField13; }
-      }
-      public bool Field13 {
-        get { return result.Field13; }
-        set { SetField13(value); }
-      }
-      public Builder SetField13(bool value) {
-        PrepareBuilder();
-        result.hasField13 = true;
-        result.field13_ = value;
-        return this;
-      }
-      public Builder ClearField13() {
-        PrepareBuilder();
-        result.hasField13 = false;
-        result.field13_ = true;
-        return this;
-      }
-
-      public bool HasField14 {
-        get { return result.hasField14; }
-      }
-      public bool Field14 {
-        get { return result.Field14; }
-        set { SetField14(value); }
-      }
-      public Builder SetField14(bool value) {
-        PrepareBuilder();
-        result.hasField14 = true;
-        result.field14_ = value;
-        return this;
-      }
-      public Builder ClearField14() {
-        PrepareBuilder();
-        result.hasField14 = false;
-        result.field14_ = true;
-        return this;
-      }
-
-      public bool HasField104 {
-        get { return result.hasField104; }
-      }
-      public int Field104 {
-        get { return result.Field104; }
-        set { SetField104(value); }
-      }
-      public Builder SetField104(int value) {
-        PrepareBuilder();
-        result.hasField104 = true;
-        result.field104_ = value;
-        return this;
-      }
-      public Builder ClearField104() {
-        PrepareBuilder();
-        result.hasField104 = false;
-        result.field104_ = 0;
-        return this;
-      }
-
-      public bool HasField100 {
-        get { return result.hasField100; }
-      }
-      public int Field100 {
-        get { return result.Field100; }
-        set { SetField100(value); }
-      }
-      public Builder SetField100(int value) {
-        PrepareBuilder();
-        result.hasField100 = true;
-        result.field100_ = value;
-        return this;
-      }
-      public Builder ClearField100() {
-        PrepareBuilder();
-        result.hasField100 = false;
-        result.field100_ = 0;
-        return this;
-      }
-
-      public bool HasField101 {
-        get { return result.hasField101; }
-      }
-      public int Field101 {
-        get { return result.Field101; }
-        set { SetField101(value); }
-      }
-      public Builder SetField101(int value) {
-        PrepareBuilder();
-        result.hasField101 = true;
-        result.field101_ = value;
-        return this;
-      }
-      public Builder ClearField101() {
-        PrepareBuilder();
-        result.hasField101 = false;
-        result.field101_ = 0;
-        return this;
-      }
-
-      public bool HasField102 {
-        get { return result.hasField102; }
-      }
-      public string Field102 {
-        get { return result.Field102; }
-        set { SetField102(value); }
-      }
-      public Builder SetField102(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField102 = true;
-        result.field102_ = value;
-        return this;
-      }
-      public Builder ClearField102() {
-        PrepareBuilder();
-        result.hasField102 = false;
-        result.field102_ = "";
-        return this;
-      }
-
-      public bool HasField103 {
-        get { return result.hasField103; }
-      }
-      public string Field103 {
-        get { return result.Field103; }
-        set { SetField103(value); }
-      }
-      public Builder SetField103(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField103 = true;
-        result.field103_ = value;
-        return this;
-      }
-      public Builder ClearField103() {
-        PrepareBuilder();
-        result.hasField103 = false;
-        result.field103_ = "";
-        return this;
-      }
-
-      public bool HasField29 {
-        get { return result.hasField29; }
-      }
-      public int Field29 {
-        get { return result.Field29; }
-        set { SetField29(value); }
-      }
-      public Builder SetField29(int value) {
-        PrepareBuilder();
-        result.hasField29 = true;
-        result.field29_ = value;
-        return this;
-      }
-      public Builder ClearField29() {
-        PrepareBuilder();
-        result.hasField29 = false;
-        result.field29_ = 0;
-        return this;
-      }
-
-      public bool HasField30 {
-        get { return result.hasField30; }
-      }
-      public bool Field30 {
-        get { return result.Field30; }
-        set { SetField30(value); }
-      }
-      public Builder SetField30(bool value) {
-        PrepareBuilder();
-        result.hasField30 = true;
-        result.field30_ = value;
-        return this;
-      }
-      public Builder ClearField30() {
-        PrepareBuilder();
-        result.hasField30 = false;
-        result.field30_ = false;
-        return this;
-      }
-
-      public bool HasField60 {
-        get { return result.hasField60; }
-      }
-      public int Field60 {
-        get { return result.Field60; }
-        set { SetField60(value); }
-      }
-      public Builder SetField60(int value) {
-        PrepareBuilder();
-        result.hasField60 = true;
-        result.field60_ = value;
-        return this;
-      }
-      public Builder ClearField60() {
-        PrepareBuilder();
-        result.hasField60 = false;
-        result.field60_ = -1;
-        return this;
-      }
-
-      public bool HasField271 {
-        get { return result.hasField271; }
-      }
-      public int Field271 {
-        get { return result.Field271; }
-        set { SetField271(value); }
-      }
-      public Builder SetField271(int value) {
-        PrepareBuilder();
-        result.hasField271 = true;
-        result.field271_ = value;
-        return this;
-      }
-      public Builder ClearField271() {
-        PrepareBuilder();
-        result.hasField271 = false;
-        result.field271_ = -1;
-        return this;
-      }
-
-      public bool HasField272 {
-        get { return result.hasField272; }
-      }
-      public int Field272 {
-        get { return result.Field272; }
-        set { SetField272(value); }
-      }
-      public Builder SetField272(int value) {
-        PrepareBuilder();
-        result.hasField272 = true;
-        result.field272_ = value;
-        return this;
-      }
-      public Builder ClearField272() {
-        PrepareBuilder();
-        result.hasField272 = false;
-        result.field272_ = -1;
-        return this;
-      }
-
-      public bool HasField150 {
-        get { return result.hasField150; }
-      }
-      public int Field150 {
-        get { return result.Field150; }
-        set { SetField150(value); }
-      }
-      public Builder SetField150(int value) {
-        PrepareBuilder();
-        result.hasField150 = true;
-        result.field150_ = value;
-        return this;
-      }
-      public Builder ClearField150() {
-        PrepareBuilder();
-        result.hasField150 = false;
-        result.field150_ = 0;
-        return this;
-      }
-
-      public bool HasField23 {
-        get { return result.hasField23; }
-      }
-      public int Field23 {
-        get { return result.Field23; }
-        set { SetField23(value); }
-      }
-      public Builder SetField23(int value) {
-        PrepareBuilder();
-        result.hasField23 = true;
-        result.field23_ = value;
-        return this;
-      }
-      public Builder ClearField23() {
-        PrepareBuilder();
-        result.hasField23 = false;
-        result.field23_ = 0;
-        return this;
-      }
-
-      public bool HasField24 {
-        get { return result.hasField24; }
-      }
-      public bool Field24 {
-        get { return result.Field24; }
-        set { SetField24(value); }
-      }
-      public Builder SetField24(bool value) {
-        PrepareBuilder();
-        result.hasField24 = true;
-        result.field24_ = value;
-        return this;
-      }
-      public Builder ClearField24() {
-        PrepareBuilder();
-        result.hasField24 = false;
-        result.field24_ = false;
-        return this;
-      }
-
-      public bool HasField25 {
-        get { return result.hasField25; }
-      }
-      public int Field25 {
-        get { return result.Field25; }
-        set { SetField25(value); }
-      }
-      public Builder SetField25(int value) {
-        PrepareBuilder();
-        result.hasField25 = true;
-        result.field25_ = value;
-        return this;
-      }
-      public Builder ClearField25() {
-        PrepareBuilder();
-        result.hasField25 = false;
-        result.field25_ = 0;
-        return this;
-      }
-
-      public bool HasField15 {
-       get { return result.hasField15; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage Field15 {
-        get { return result.Field15; }
-        set { SetField15(value); }
-      }
-      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField15 = true;
-        result.field15_ = value;
-        return this;
-      }
-      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasField15 = true;
-        result.field15_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeField15(global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasField15 &&
-            result.field15_ != global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance) {
-            result.field15_ = global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.CreateBuilder(result.field15_).MergeFrom(value).BuildPartial();
-        } else {
-          result.field15_ = value;
-        }
-        result.hasField15 = true;
-        return this;
-      }
-      public Builder ClearField15() {
-        PrepareBuilder();
-        result.hasField15 = false;
-        result.field15_ = null;
-        return this;
-      }
-
-      public bool HasField78 {
-        get { return result.hasField78; }
-      }
-      public bool Field78 {
-        get { return result.Field78; }
-        set { SetField78(value); }
-      }
-      public Builder SetField78(bool value) {
-        PrepareBuilder();
-        result.hasField78 = true;
-        result.field78_ = value;
-        return this;
-      }
-      public Builder ClearField78() {
-        PrepareBuilder();
-        result.hasField78 = false;
-        result.field78_ = false;
-        return this;
-      }
-
-      public bool HasField67 {
-        get { return result.hasField67; }
-      }
-      public int Field67 {
-        get { return result.Field67; }
-        set { SetField67(value); }
-      }
-      public Builder SetField67(int value) {
-        PrepareBuilder();
-        result.hasField67 = true;
-        result.field67_ = value;
-        return this;
-      }
-      public Builder ClearField67() {
-        PrepareBuilder();
-        result.hasField67 = false;
-        result.field67_ = 0;
-        return this;
-      }
-
-      public bool HasField68 {
-        get { return result.hasField68; }
-      }
-      public int Field68 {
-        get { return result.Field68; }
-        set { SetField68(value); }
-      }
-      public Builder SetField68(int value) {
-        PrepareBuilder();
-        result.hasField68 = true;
-        result.field68_ = value;
-        return this;
-      }
-      public Builder ClearField68() {
-        PrepareBuilder();
-        result.hasField68 = false;
-        result.field68_ = 0;
-        return this;
-      }
-
-      public bool HasField128 {
-        get { return result.hasField128; }
-      }
-      public int Field128 {
-        get { return result.Field128; }
-        set { SetField128(value); }
-      }
-      public Builder SetField128(int value) {
-        PrepareBuilder();
-        result.hasField128 = true;
-        result.field128_ = value;
-        return this;
-      }
-      public Builder ClearField128() {
-        PrepareBuilder();
-        result.hasField128 = false;
-        result.field128_ = 0;
-        return this;
-      }
-
-      public bool HasField129 {
-        get { return result.hasField129; }
-      }
-      public string Field129 {
-        get { return result.Field129; }
-        set { SetField129(value); }
-      }
-      public Builder SetField129(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField129 = true;
-        result.field129_ = value;
-        return this;
-      }
-      public Builder ClearField129() {
-        PrepareBuilder();
-        result.hasField129 = false;
-        result.field129_ = "xxxxxxxxxxxxxxxxxxxxx";
-        return this;
-      }
-
-      public bool HasField131 {
-        get { return result.hasField131; }
-      }
-      public int Field131 {
-        get { return result.Field131; }
-        set { SetField131(value); }
-      }
-      public Builder SetField131(int value) {
-        PrepareBuilder();
-        result.hasField131 = true;
-        result.field131_ = value;
-        return this;
-      }
-      public Builder ClearField131() {
-        PrepareBuilder();
-        result.hasField131 = false;
-        result.field131_ = 0;
-        return this;
-      }
-    }
-    static SpeedMessage1() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SpeedMessage1SubMessage : pb::GeneratedMessage<SpeedMessage1SubMessage, SpeedMessage1SubMessage.Builder> {
-    private SpeedMessage1SubMessage() { }
-    private static readonly SpeedMessage1SubMessage defaultInstance = new SpeedMessage1SubMessage().MakeReadOnly();
-    private static readonly string[] _speedMessage1SubMessageFieldNames = new string[] { "field1", "field12", "field13", "field14", "field15", "field16", "field19", "field2", "field20", "field203", "field204", "field205", "field206", "field207", "field21", "field22", "field23", "field28", "field3", "field300" };
-    private static readonly uint[] _speedMessage1SubMessageFieldTags = new uint[] { 8, 96, 104, 112, 122, 128, 152, 16, 160, 1629, 1632, 1642, 1648, 1656, 169, 176, 184, 224, 24, 2400 };
-    public static SpeedMessage1SubMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SpeedMessage1SubMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SpeedMessage1SubMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage1SubMessage, SpeedMessage1SubMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage1SubMessage__FieldAccessorTable; }
-    }
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private int field1_;
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public int Field1 {
-      get { return field1_; }
-    }
-
-    public const int Field2FieldNumber = 2;
-    private bool hasField2;
-    private int field2_;
-    public bool HasField2 {
-      get { return hasField2; }
-    }
-    public int Field2 {
-      get { return field2_; }
-    }
-
-    public const int Field3FieldNumber = 3;
-    private bool hasField3;
-    private int field3_;
-    public bool HasField3 {
-      get { return hasField3; }
-    }
-    public int Field3 {
-      get { return field3_; }
-    }
-
-    public const int Field15FieldNumber = 15;
-    private bool hasField15;
-    private string field15_ = "";
-    public bool HasField15 {
-      get { return hasField15; }
-    }
-    public string Field15 {
-      get { return field15_; }
-    }
-
-    public const int Field12FieldNumber = 12;
-    private bool hasField12;
-    private bool field12_ = true;
-    public bool HasField12 {
-      get { return hasField12; }
-    }
-    public bool Field12 {
-      get { return field12_; }
-    }
-
-    public const int Field13FieldNumber = 13;
-    private bool hasField13;
-    private long field13_;
-    public bool HasField13 {
-      get { return hasField13; }
-    }
-    public long Field13 {
-      get { return field13_; }
-    }
-
-    public const int Field14FieldNumber = 14;
-    private bool hasField14;
-    private long field14_;
-    public bool HasField14 {
-      get { return hasField14; }
-    }
-    public long Field14 {
-      get { return field14_; }
-    }
-
-    public const int Field16FieldNumber = 16;
-    private bool hasField16;
-    private int field16_;
-    public bool HasField16 {
-      get { return hasField16; }
-    }
-    public int Field16 {
-      get { return field16_; }
-    }
-
-    public const int Field19FieldNumber = 19;
-    private bool hasField19;
-    private int field19_ = 2;
-    public bool HasField19 {
-      get { return hasField19; }
-    }
-    public int Field19 {
-      get { return field19_; }
-    }
-
-    public const int Field20FieldNumber = 20;
-    private bool hasField20;
-    private bool field20_ = true;
-    public bool HasField20 {
-      get { return hasField20; }
-    }
-    public bool Field20 {
-      get { return field20_; }
-    }
-
-    public const int Field28FieldNumber = 28;
-    private bool hasField28;
-    private bool field28_ = true;
-    public bool HasField28 {
-      get { return hasField28; }
-    }
-    public bool Field28 {
-      get { return field28_; }
-    }
-
-    public const int Field21FieldNumber = 21;
-    private bool hasField21;
-    private ulong field21_;
-    public bool HasField21 {
-      get { return hasField21; }
-    }
-    public ulong Field21 {
-      get { return field21_; }
-    }
-
-    public const int Field22FieldNumber = 22;
-    private bool hasField22;
-    private int field22_;
-    public bool HasField22 {
-      get { return hasField22; }
-    }
-    public int Field22 {
-      get { return field22_; }
-    }
-
-    public const int Field23FieldNumber = 23;
-    private bool hasField23;
-    private bool field23_;
-    public bool HasField23 {
-      get { return hasField23; }
-    }
-    public bool Field23 {
-      get { return field23_; }
-    }
-
-    public const int Field206FieldNumber = 206;
-    private bool hasField206;
-    private bool field206_;
-    public bool HasField206 {
-      get { return hasField206; }
-    }
-    public bool Field206 {
-      get { return field206_; }
-    }
-
-    public const int Field203FieldNumber = 203;
-    private bool hasField203;
-    private uint field203_;
-    public bool HasField203 {
-      get { return hasField203; }
-    }
-    public uint Field203 {
-      get { return field203_; }
-    }
-
-    public const int Field204FieldNumber = 204;
-    private bool hasField204;
-    private int field204_;
-    public bool HasField204 {
-      get { return hasField204; }
-    }
-    public int Field204 {
-      get { return field204_; }
-    }
-
-    public const int Field205FieldNumber = 205;
-    private bool hasField205;
-    private string field205_ = "";
-    public bool HasField205 {
-      get { return hasField205; }
-    }
-    public string Field205 {
-      get { return field205_; }
-    }
-
-    public const int Field207FieldNumber = 207;
-    private bool hasField207;
-    private ulong field207_;
-    public bool HasField207 {
-      get { return hasField207; }
-    }
-    public ulong Field207 {
-      get { return field207_; }
-    }
-
-    public const int Field300FieldNumber = 300;
-    private bool hasField300;
-    private ulong field300_;
-    public bool HasField300 {
-      get { return hasField300; }
-    }
-    public ulong Field300 {
-      get { return field300_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _speedMessage1SubMessageFieldNames;
-      if (hasField1) {
-        output.WriteInt32(1, field_names[0], Field1);
-      }
-      if (hasField2) {
-        output.WriteInt32(2, field_names[7], Field2);
-      }
-      if (hasField3) {
-        output.WriteInt32(3, field_names[18], Field3);
-      }
-      if (hasField12) {
-        output.WriteBool(12, field_names[1], Field12);
-      }
-      if (hasField13) {
-        output.WriteInt64(13, field_names[2], Field13);
-      }
-      if (hasField14) {
-        output.WriteInt64(14, field_names[3], Field14);
-      }
-      if (hasField15) {
-        output.WriteString(15, field_names[4], Field15);
-      }
-      if (hasField16) {
-        output.WriteInt32(16, field_names[5], Field16);
-      }
-      if (hasField19) {
-        output.WriteInt32(19, field_names[6], Field19);
-      }
-      if (hasField20) {
-        output.WriteBool(20, field_names[8], Field20);
-      }
-      if (hasField21) {
-        output.WriteFixed64(21, field_names[14], Field21);
-      }
-      if (hasField22) {
-        output.WriteInt32(22, field_names[15], Field22);
-      }
-      if (hasField23) {
-        output.WriteBool(23, field_names[16], Field23);
-      }
-      if (hasField28) {
-        output.WriteBool(28, field_names[17], Field28);
-      }
-      if (hasField203) {
-        output.WriteFixed32(203, field_names[9], Field203);
-      }
-      if (hasField204) {
-        output.WriteInt32(204, field_names[10], Field204);
-      }
-      if (hasField205) {
-        output.WriteString(205, field_names[11], Field205);
-      }
-      if (hasField206) {
-        output.WriteBool(206, field_names[12], Field206);
-      }
-      if (hasField207) {
-        output.WriteUInt64(207, field_names[13], Field207);
-      }
-      if (hasField300) {
-        output.WriteUInt64(300, field_names[19], Field300);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasField1) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Field1);
-      }
-      if (hasField2) {
-        size += pb::CodedOutputStream.ComputeInt32Size(2, Field2);
-      }
-      if (hasField3) {
-        size += pb::CodedOutputStream.ComputeInt32Size(3, Field3);
-      }
-      if (hasField15) {
-        size += pb::CodedOutputStream.ComputeStringSize(15, Field15);
-      }
-      if (hasField12) {
-        size += pb::CodedOutputStream.ComputeBoolSize(12, Field12);
-      }
-      if (hasField13) {
-        size += pb::CodedOutputStream.ComputeInt64Size(13, Field13);
-      }
-      if (hasField14) {
-        size += pb::CodedOutputStream.ComputeInt64Size(14, Field14);
-      }
-      if (hasField16) {
-        size += pb::CodedOutputStream.ComputeInt32Size(16, Field16);
-      }
-      if (hasField19) {
-        size += pb::CodedOutputStream.ComputeInt32Size(19, Field19);
-      }
-      if (hasField20) {
-        size += pb::CodedOutputStream.ComputeBoolSize(20, Field20);
-      }
-      if (hasField28) {
-        size += pb::CodedOutputStream.ComputeBoolSize(28, Field28);
-      }
-      if (hasField21) {
-        size += pb::CodedOutputStream.ComputeFixed64Size(21, Field21);
-      }
-      if (hasField22) {
-        size += pb::CodedOutputStream.ComputeInt32Size(22, Field22);
-      }
-      if (hasField23) {
-        size += pb::CodedOutputStream.ComputeBoolSize(23, Field23);
-      }
-      if (hasField206) {
-        size += pb::CodedOutputStream.ComputeBoolSize(206, Field206);
-      }
-      if (hasField203) {
-        size += pb::CodedOutputStream.ComputeFixed32Size(203, Field203);
-      }
-      if (hasField204) {
-        size += pb::CodedOutputStream.ComputeInt32Size(204, Field204);
-      }
-      if (hasField205) {
-        size += pb::CodedOutputStream.ComputeStringSize(205, Field205);
-      }
-      if (hasField207) {
-        size += pb::CodedOutputStream.ComputeUInt64Size(207, Field207);
-      }
-      if (hasField300) {
-        size += pb::CodedOutputStream.ComputeUInt64Size(300, Field300);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static SpeedMessage1SubMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SpeedMessage1SubMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SpeedMessage1SubMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(SpeedMessage1SubMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage1SubMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SpeedMessage1SubMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SpeedMessage1SubMessage result;
-
-      private SpeedMessage1SubMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SpeedMessage1SubMessage original = result;
-          result = new SpeedMessage1SubMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SpeedMessage1SubMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Descriptor; }
-      }
-
-      public override SpeedMessage1SubMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance; }
-      }
-
-      public override SpeedMessage1SubMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is SpeedMessage1SubMessage) {
-          return MergeFrom((SpeedMessage1SubMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(SpeedMessage1SubMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasField1) {
-          Field1 = other.Field1;
-        }
-        if (other.HasField2) {
-          Field2 = other.Field2;
-        }
-        if (other.HasField3) {
-          Field3 = other.Field3;
-        }
-        if (other.HasField15) {
-          Field15 = other.Field15;
-        }
-        if (other.HasField12) {
-          Field12 = other.Field12;
-        }
-        if (other.HasField13) {
-          Field13 = other.Field13;
-        }
-        if (other.HasField14) {
-          Field14 = other.Field14;
-        }
-        if (other.HasField16) {
-          Field16 = other.Field16;
-        }
-        if (other.HasField19) {
-          Field19 = other.Field19;
-        }
-        if (other.HasField20) {
-          Field20 = other.Field20;
-        }
-        if (other.HasField28) {
-          Field28 = other.Field28;
-        }
-        if (other.HasField21) {
-          Field21 = other.Field21;
-        }
-        if (other.HasField22) {
-          Field22 = other.Field22;
-        }
-        if (other.HasField23) {
-          Field23 = other.Field23;
-        }
-        if (other.HasField206) {
-          Field206 = other.Field206;
-        }
-        if (other.HasField203) {
-          Field203 = other.Field203;
-        }
-        if (other.HasField204) {
-          Field204 = other.Field204;
-        }
-        if (other.HasField205) {
-          Field205 = other.Field205;
-        }
-        if (other.HasField207) {
-          Field207 = other.Field207;
-        }
-        if (other.HasField300) {
-          Field300 = other.Field300;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_speedMessage1SubMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _speedMessage1SubMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasField1 = input.ReadInt32(ref result.field1_);
-              break;
-            }
-            case 16: {
-              result.hasField2 = input.ReadInt32(ref result.field2_);
-              break;
-            }
-            case 24: {
-              result.hasField3 = input.ReadInt32(ref result.field3_);
-              break;
-            }
-            case 96: {
-              result.hasField12 = input.ReadBool(ref result.field12_);
-              break;
-            }
-            case 104: {
-              result.hasField13 = input.ReadInt64(ref result.field13_);
-              break;
-            }
-            case 112: {
-              result.hasField14 = input.ReadInt64(ref result.field14_);
-              break;
-            }
-            case 122: {
-              result.hasField15 = input.ReadString(ref result.field15_);
-              break;
-            }
-            case 128: {
-              result.hasField16 = input.ReadInt32(ref result.field16_);
-              break;
-            }
-            case 152: {
-              result.hasField19 = input.ReadInt32(ref result.field19_);
-              break;
-            }
-            case 160: {
-              result.hasField20 = input.ReadBool(ref result.field20_);
-              break;
-            }
-            case 169: {
-              result.hasField21 = input.ReadFixed64(ref result.field21_);
-              break;
-            }
-            case 176: {
-              result.hasField22 = input.ReadInt32(ref result.field22_);
-              break;
-            }
-            case 184: {
-              result.hasField23 = input.ReadBool(ref result.field23_);
-              break;
-            }
-            case 224: {
-              result.hasField28 = input.ReadBool(ref result.field28_);
-              break;
-            }
-            case 1629: {
-              result.hasField203 = input.ReadFixed32(ref result.field203_);
-              break;
-            }
-            case 1632: {
-              result.hasField204 = input.ReadInt32(ref result.field204_);
-              break;
-            }
-            case 1642: {
-              result.hasField205 = input.ReadString(ref result.field205_);
-              break;
-            }
-            case 1648: {
-              result.hasField206 = input.ReadBool(ref result.field206_);
-              break;
-            }
-            case 1656: {
-              result.hasField207 = input.ReadUInt64(ref result.field207_);
-              break;
-            }
-            case 2400: {
-              result.hasField300 = input.ReadUInt64(ref result.field300_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public int Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(int value) {
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = 0;
-        return this;
-      }
-
-      public bool HasField2 {
-        get { return result.hasField2; }
-      }
-      public int Field2 {
-        get { return result.Field2; }
-        set { SetField2(value); }
-      }
-      public Builder SetField2(int value) {
-        PrepareBuilder();
-        result.hasField2 = true;
-        result.field2_ = value;
-        return this;
-      }
-      public Builder ClearField2() {
-        PrepareBuilder();
-        result.hasField2 = false;
-        result.field2_ = 0;
-        return this;
-      }
-
-      public bool HasField3 {
-        get { return result.hasField3; }
-      }
-      public int Field3 {
-        get { return result.Field3; }
-        set { SetField3(value); }
-      }
-      public Builder SetField3(int value) {
-        PrepareBuilder();
-        result.hasField3 = true;
-        result.field3_ = value;
-        return this;
-      }
-      public Builder ClearField3() {
-        PrepareBuilder();
-        result.hasField3 = false;
-        result.field3_ = 0;
-        return this;
-      }
-
-      public bool HasField15 {
-        get { return result.hasField15; }
-      }
-      public string Field15 {
-        get { return result.Field15; }
-        set { SetField15(value); }
-      }
-      public Builder SetField15(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField15 = true;
-        result.field15_ = value;
-        return this;
-      }
-      public Builder ClearField15() {
-        PrepareBuilder();
-        result.hasField15 = false;
-        result.field15_ = "";
-        return this;
-      }
-
-      public bool HasField12 {
-        get { return result.hasField12; }
-      }
-      public bool Field12 {
-        get { return result.Field12; }
-        set { SetField12(value); }
-      }
-      public Builder SetField12(bool value) {
-        PrepareBuilder();
-        result.hasField12 = true;
-        result.field12_ = value;
-        return this;
-      }
-      public Builder ClearField12() {
-        PrepareBuilder();
-        result.hasField12 = false;
-        result.field12_ = true;
-        return this;
-      }
-
-      public bool HasField13 {
-        get { return result.hasField13; }
-      }
-      public long Field13 {
-        get { return result.Field13; }
-        set { SetField13(value); }
-      }
-      public Builder SetField13(long value) {
-        PrepareBuilder();
-        result.hasField13 = true;
-        result.field13_ = value;
-        return this;
-      }
-      public Builder ClearField13() {
-        PrepareBuilder();
-        result.hasField13 = false;
-        result.field13_ = 0L;
-        return this;
-      }
-
-      public bool HasField14 {
-        get { return result.hasField14; }
-      }
-      public long Field14 {
-        get { return result.Field14; }
-        set { SetField14(value); }
-      }
-      public Builder SetField14(long value) {
-        PrepareBuilder();
-        result.hasField14 = true;
-        result.field14_ = value;
-        return this;
-      }
-      public Builder ClearField14() {
-        PrepareBuilder();
-        result.hasField14 = false;
-        result.field14_ = 0L;
-        return this;
-      }
-
-      public bool HasField16 {
-        get { return result.hasField16; }
-      }
-      public int Field16 {
-        get { return result.Field16; }
-        set { SetField16(value); }
-      }
-      public Builder SetField16(int value) {
-        PrepareBuilder();
-        result.hasField16 = true;
-        result.field16_ = value;
-        return this;
-      }
-      public Builder ClearField16() {
-        PrepareBuilder();
-        result.hasField16 = false;
-        result.field16_ = 0;
-        return this;
-      }
-
-      public bool HasField19 {
-        get { return result.hasField19; }
-      }
-      public int Field19 {
-        get { return result.Field19; }
-        set { SetField19(value); }
-      }
-      public Builder SetField19(int value) {
-        PrepareBuilder();
-        result.hasField19 = true;
-        result.field19_ = value;
-        return this;
-      }
-      public Builder ClearField19() {
-        PrepareBuilder();
-        result.hasField19 = false;
-        result.field19_ = 2;
-        return this;
-      }
-
-      public bool HasField20 {
-        get { return result.hasField20; }
-      }
-      public bool Field20 {
-        get { return result.Field20; }
-        set { SetField20(value); }
-      }
-      public Builder SetField20(bool value) {
-        PrepareBuilder();
-        result.hasField20 = true;
-        result.field20_ = value;
-        return this;
-      }
-      public Builder ClearField20() {
-        PrepareBuilder();
-        result.hasField20 = false;
-        result.field20_ = true;
-        return this;
-      }
-
-      public bool HasField28 {
-        get { return result.hasField28; }
-      }
-      public bool Field28 {
-        get { return result.Field28; }
-        set { SetField28(value); }
-      }
-      public Builder SetField28(bool value) {
-        PrepareBuilder();
-        result.hasField28 = true;
-        result.field28_ = value;
-        return this;
-      }
-      public Builder ClearField28() {
-        PrepareBuilder();
-        result.hasField28 = false;
-        result.field28_ = true;
-        return this;
-      }
-
-      public bool HasField21 {
-        get { return result.hasField21; }
-      }
-      public ulong Field21 {
-        get { return result.Field21; }
-        set { SetField21(value); }
-      }
-      public Builder SetField21(ulong value) {
-        PrepareBuilder();
-        result.hasField21 = true;
-        result.field21_ = value;
-        return this;
-      }
-      public Builder ClearField21() {
-        PrepareBuilder();
-        result.hasField21 = false;
-        result.field21_ = 0UL;
-        return this;
-      }
-
-      public bool HasField22 {
-        get { return result.hasField22; }
-      }
-      public int Field22 {
-        get { return result.Field22; }
-        set { SetField22(value); }
-      }
-      public Builder SetField22(int value) {
-        PrepareBuilder();
-        result.hasField22 = true;
-        result.field22_ = value;
-        return this;
-      }
-      public Builder ClearField22() {
-        PrepareBuilder();
-        result.hasField22 = false;
-        result.field22_ = 0;
-        return this;
-      }
-
-      public bool HasField23 {
-        get { return result.hasField23; }
-      }
-      public bool Field23 {
-        get { return result.Field23; }
-        set { SetField23(value); }
-      }
-      public Builder SetField23(bool value) {
-        PrepareBuilder();
-        result.hasField23 = true;
-        result.field23_ = value;
-        return this;
-      }
-      public Builder ClearField23() {
-        PrepareBuilder();
-        result.hasField23 = false;
-        result.field23_ = false;
-        return this;
-      }
-
-      public bool HasField206 {
-        get { return result.hasField206; }
-      }
-      public bool Field206 {
-        get { return result.Field206; }
-        set { SetField206(value); }
-      }
-      public Builder SetField206(bool value) {
-        PrepareBuilder();
-        result.hasField206 = true;
-        result.field206_ = value;
-        return this;
-      }
-      public Builder ClearField206() {
-        PrepareBuilder();
-        result.hasField206 = false;
-        result.field206_ = false;
-        return this;
-      }
-
-      public bool HasField203 {
-        get { return result.hasField203; }
-      }
-      public uint Field203 {
-        get { return result.Field203; }
-        set { SetField203(value); }
-      }
-      public Builder SetField203(uint value) {
-        PrepareBuilder();
-        result.hasField203 = true;
-        result.field203_ = value;
-        return this;
-      }
-      public Builder ClearField203() {
-        PrepareBuilder();
-        result.hasField203 = false;
-        result.field203_ = 0;
-        return this;
-      }
-
-      public bool HasField204 {
-        get { return result.hasField204; }
-      }
-      public int Field204 {
-        get { return result.Field204; }
-        set { SetField204(value); }
-      }
-      public Builder SetField204(int value) {
-        PrepareBuilder();
-        result.hasField204 = true;
-        result.field204_ = value;
-        return this;
-      }
-      public Builder ClearField204() {
-        PrepareBuilder();
-        result.hasField204 = false;
-        result.field204_ = 0;
-        return this;
-      }
-
-      public bool HasField205 {
-        get { return result.hasField205; }
-      }
-      public string Field205 {
-        get { return result.Field205; }
-        set { SetField205(value); }
-      }
-      public Builder SetField205(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField205 = true;
-        result.field205_ = value;
-        return this;
-      }
-      public Builder ClearField205() {
-        PrepareBuilder();
-        result.hasField205 = false;
-        result.field205_ = "";
-        return this;
-      }
-
-      public bool HasField207 {
-        get { return result.hasField207; }
-      }
-      public ulong Field207 {
-        get { return result.Field207; }
-        set { SetField207(value); }
-      }
-      public Builder SetField207(ulong value) {
-        PrepareBuilder();
-        result.hasField207 = true;
-        result.field207_ = value;
-        return this;
-      }
-      public Builder ClearField207() {
-        PrepareBuilder();
-        result.hasField207 = false;
-        result.field207_ = 0UL;
-        return this;
-      }
-
-      public bool HasField300 {
-        get { return result.hasField300; }
-      }
-      public ulong Field300 {
-        get { return result.Field300; }
-        set { SetField300(value); }
-      }
-      public Builder SetField300(ulong value) {
-        PrepareBuilder();
-        result.hasField300 = true;
-        result.field300_ = value;
-        return this;
-      }
-      public Builder ClearField300() {
-        PrepareBuilder();
-        result.hasField300 = false;
-        result.field300_ = 0UL;
-        return this;
-      }
-    }
-    static SpeedMessage1SubMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SpeedMessage2 : pb::GeneratedMessage<SpeedMessage2, SpeedMessage2.Builder> {
-    private SpeedMessage2() { }
-    private static readonly SpeedMessage2 defaultInstance = new SpeedMessage2().MakeReadOnly();
-    private static readonly string[] _speedMessage2FieldNames = new string[] { "field1", "field109", "field127", "field128", "field129", "field130", "field131", "field2", "field205", "field206", "field21", "field210", "field211", "field212", "field213", "field216", "field217", "field218", "field220", "field221", "field222", "field25", "field3", "field30", "field4", "field6", "field63", "field71", "field75", "group1" };
-    private static readonly uint[] _speedMessage2FieldTags = new uint[] { 10, 872, 1018, 1026, 1032, 1040, 1048, 18, 1640, 1648, 168, 1680, 1688, 1696, 1704, 1728, 1736, 1744, 1760, 1768, 1781, 205, 24, 240, 32, 50, 504, 568, 600, 83 };
-    public static SpeedMessage2 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SpeedMessage2 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SpeedMessage2 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage2__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage2, SpeedMessage2.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage2__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {
-        private Group1() { }
-        private static readonly Group1 defaultInstance = new Group1().MakeReadOnly();
-        private static readonly string[] _group1FieldNames = new string[] { "field11", "field12", "field13", "field14", "field15", "field16", "field20", "field22", "field24", "field26", "field27", "field28", "field29", "field31", "field5", "field73" };
-        private static readonly uint[] _group1FieldTags = new uint[] { 93, 98, 106, 114, 120, 130, 160, 178, 194, 213, 218, 224, 234, 250, 40, 584 };
-        public static Group1 DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override Group1 DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override Group1 ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage2_Group1__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage2_Group1__FieldAccessorTable; }
-        }
-
-        public const int Field11FieldNumber = 11;
-        private bool hasField11;
-        private float field11_;
-        public bool HasField11 {
-          get { return hasField11; }
-        }
-        public float Field11 {
-          get { return field11_; }
-        }
-
-        public const int Field26FieldNumber = 26;
-        private bool hasField26;
-        private float field26_;
-        public bool HasField26 {
-          get { return hasField26; }
-        }
-        public float Field26 {
-          get { return field26_; }
-        }
-
-        public const int Field12FieldNumber = 12;
-        private bool hasField12;
-        private string field12_ = "";
-        public bool HasField12 {
-          get { return hasField12; }
-        }
-        public string Field12 {
-          get { return field12_; }
-        }
-
-        public const int Field13FieldNumber = 13;
-        private bool hasField13;
-        private string field13_ = "";
-        public bool HasField13 {
-          get { return hasField13; }
-        }
-        public string Field13 {
-          get { return field13_; }
-        }
-
-        public const int Field14FieldNumber = 14;
-        private pbc::PopsicleList<string> field14_ = new pbc::PopsicleList<string>();
-        public scg::IList<string> Field14List {
-          get { return pbc::Lists.AsReadOnly(field14_); }
-        }
-        public int Field14Count {
-          get { return field14_.Count; }
-        }
-        public string GetField14(int index) {
-          return field14_[index];
-        }
-
-        public const int Field15FieldNumber = 15;
-        private bool hasField15;
-        private ulong field15_;
-        public bool HasField15 {
-          get { return hasField15; }
-        }
-        public ulong Field15 {
-          get { return field15_; }
-        }
-
-        public const int Field5FieldNumber = 5;
-        private bool hasField5;
-        private int field5_;
-        public bool HasField5 {
-          get { return hasField5; }
-        }
-        public int Field5 {
-          get { return field5_; }
-        }
-
-        public const int Field27FieldNumber = 27;
-        private bool hasField27;
-        private string field27_ = "";
-        public bool HasField27 {
-          get { return hasField27; }
-        }
-        public string Field27 {
-          get { return field27_; }
-        }
-
-        public const int Field28FieldNumber = 28;
-        private bool hasField28;
-        private int field28_;
-        public bool HasField28 {
-          get { return hasField28; }
-        }
-        public int Field28 {
-          get { return field28_; }
-        }
-
-        public const int Field29FieldNumber = 29;
-        private bool hasField29;
-        private string field29_ = "";
-        public bool HasField29 {
-          get { return hasField29; }
-        }
-        public string Field29 {
-          get { return field29_; }
-        }
-
-        public const int Field16FieldNumber = 16;
-        private bool hasField16;
-        private string field16_ = "";
-        public bool HasField16 {
-          get { return hasField16; }
-        }
-        public string Field16 {
-          get { return field16_; }
-        }
-
-        public const int Field22FieldNumber = 22;
-        private pbc::PopsicleList<string> field22_ = new pbc::PopsicleList<string>();
-        public scg::IList<string> Field22List {
-          get { return pbc::Lists.AsReadOnly(field22_); }
-        }
-        public int Field22Count {
-          get { return field22_.Count; }
-        }
-        public string GetField22(int index) {
-          return field22_[index];
-        }
-
-        public const int Field73FieldNumber = 73;
-        private pbc::PopsicleList<int> field73_ = new pbc::PopsicleList<int>();
-        public scg::IList<int> Field73List {
-          get { return pbc::Lists.AsReadOnly(field73_); }
-        }
-        public int Field73Count {
-          get { return field73_.Count; }
-        }
-        public int GetField73(int index) {
-          return field73_[index];
-        }
-
-        public const int Field20FieldNumber = 20;
-        private bool hasField20;
-        private int field20_;
-        public bool HasField20 {
-          get { return hasField20; }
-        }
-        public int Field20 {
-          get { return field20_; }
-        }
-
-        public const int Field24FieldNumber = 24;
-        private bool hasField24;
-        private string field24_ = "";
-        public bool HasField24 {
-          get { return hasField24; }
-        }
-        public string Field24 {
-          get { return field24_; }
-        }
-
-        public const int Field31FieldNumber = 31;
-        private bool hasField31;
-        private global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage field31_;
-        public bool HasField31 {
-          get { return hasField31; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage Field31 {
-          get { return field31_ ?? global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            if (!hasField11) return false;
-            if (!hasField15) return false;
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _group1FieldNames;
-          if (hasField5) {
-            output.WriteInt32(5, field_names[14], Field5);
-          }
-          if (hasField11) {
-            output.WriteFloat(11, field_names[0], Field11);
-          }
-          if (hasField12) {
-            output.WriteString(12, field_names[1], Field12);
-          }
-          if (hasField13) {
-            output.WriteString(13, field_names[2], Field13);
-          }
-          if (field14_.Count > 0) {
-            output.WriteStringArray(14, field_names[3], field14_);
-          }
-          if (hasField15) {
-            output.WriteUInt64(15, field_names[4], Field15);
-          }
-          if (hasField16) {
-            output.WriteString(16, field_names[5], Field16);
-          }
-          if (hasField20) {
-            output.WriteInt32(20, field_names[6], Field20);
-          }
-          if (field22_.Count > 0) {
-            output.WriteStringArray(22, field_names[7], field22_);
-          }
-          if (hasField24) {
-            output.WriteString(24, field_names[8], Field24);
-          }
-          if (hasField26) {
-            output.WriteFloat(26, field_names[9], Field26);
-          }
-          if (hasField27) {
-            output.WriteString(27, field_names[10], Field27);
-          }
-          if (hasField28) {
-            output.WriteInt32(28, field_names[11], Field28);
-          }
-          if (hasField29) {
-            output.WriteString(29, field_names[12], Field29);
-          }
-          if (hasField31) {
-            output.WriteMessage(31, field_names[13], Field31);
-          }
-          if (field73_.Count > 0) {
-            output.WriteInt32Array(73, field_names[15], field73_);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasField11) {
-            size += pb::CodedOutputStream.ComputeFloatSize(11, Field11);
-          }
-          if (hasField26) {
-            size += pb::CodedOutputStream.ComputeFloatSize(26, Field26);
-          }
-          if (hasField12) {
-            size += pb::CodedOutputStream.ComputeStringSize(12, Field12);
-          }
-          if (hasField13) {
-            size += pb::CodedOutputStream.ComputeStringSize(13, Field13);
-          }
-          {
-            int dataSize = 0;
-            foreach (string element in Field14List) {
-              dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-            }
-            size += dataSize;
-            size += 1 * field14_.Count;
-          }
-          if (hasField15) {
-            size += pb::CodedOutputStream.ComputeUInt64Size(15, Field15);
-          }
-          if (hasField5) {
-            size += pb::CodedOutputStream.ComputeInt32Size(5, Field5);
-          }
-          if (hasField27) {
-            size += pb::CodedOutputStream.ComputeStringSize(27, Field27);
-          }
-          if (hasField28) {
-            size += pb::CodedOutputStream.ComputeInt32Size(28, Field28);
-          }
-          if (hasField29) {
-            size += pb::CodedOutputStream.ComputeStringSize(29, Field29);
-          }
-          if (hasField16) {
-            size += pb::CodedOutputStream.ComputeStringSize(16, Field16);
-          }
-          {
-            int dataSize = 0;
-            foreach (string element in Field22List) {
-              dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-            }
-            size += dataSize;
-            size += 2 * field22_.Count;
-          }
-          {
-            int dataSize = 0;
-            foreach (int element in Field73List) {
-              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-            }
-            size += dataSize;
-            size += 2 * field73_.Count;
-          }
-          if (hasField20) {
-            size += pb::CodedOutputStream.ComputeInt32Size(20, Field20);
-          }
-          if (hasField24) {
-            size += pb::CodedOutputStream.ComputeStringSize(24, Field24);
-          }
-          if (hasField31) {
-            size += pb::CodedOutputStream.ComputeMessageSize(31, Field31);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static Group1 ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Group1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Group1 ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Group1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Group1 ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Group1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static Group1 ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private Group1 MakeReadOnly() {
-          field14_.MakeReadOnly();
-          field22_.MakeReadOnly();
-          field73_.MakeReadOnly();
-          return this;
-        }
-
-        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(Group1 prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(Group1 cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private Group1 result;
-
-          private Group1 PrepareBuilder() {
-            if (resultIsReadOnly) {
-              Group1 original = result;
-              result = new Group1();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override Group1 MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Descriptor; }
-          }
-
-          public override Group1 DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.DefaultInstance; }
-          }
-
-          public override Group1 BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is Group1) {
-              return MergeFrom((Group1) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(Group1 other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasField11) {
-              Field11 = other.Field11;
-            }
-            if (other.HasField26) {
-              Field26 = other.Field26;
-            }
-            if (other.HasField12) {
-              Field12 = other.Field12;
-            }
-            if (other.HasField13) {
-              Field13 = other.Field13;
-            }
-            if (other.field14_.Count != 0) {
-              result.field14_.Add(other.field14_);
-            }
-            if (other.HasField15) {
-              Field15 = other.Field15;
-            }
-            if (other.HasField5) {
-              Field5 = other.Field5;
-            }
-            if (other.HasField27) {
-              Field27 = other.Field27;
-            }
-            if (other.HasField28) {
-              Field28 = other.Field28;
-            }
-            if (other.HasField29) {
-              Field29 = other.Field29;
-            }
-            if (other.HasField16) {
-              Field16 = other.Field16;
-            }
-            if (other.field22_.Count != 0) {
-              result.field22_.Add(other.field22_);
-            }
-            if (other.field73_.Count != 0) {
-              result.field73_.Add(other.field73_);
-            }
-            if (other.HasField20) {
-              Field20 = other.Field20;
-            }
-            if (other.HasField24) {
-              Field24 = other.Field24;
-            }
-            if (other.HasField31) {
-              MergeField31(other.Field31);
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_group1FieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _group1FieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 40: {
-                  result.hasField5 = input.ReadInt32(ref result.field5_);
-                  break;
-                }
-                case 93: {
-                  result.hasField11 = input.ReadFloat(ref result.field11_);
-                  break;
-                }
-                case 98: {
-                  result.hasField12 = input.ReadString(ref result.field12_);
-                  break;
-                }
-                case 106: {
-                  result.hasField13 = input.ReadString(ref result.field13_);
-                  break;
-                }
-                case 114: {
-                  input.ReadStringArray(tag, field_name, result.field14_);
-                  break;
-                }
-                case 120: {
-                  result.hasField15 = input.ReadUInt64(ref result.field15_);
-                  break;
-                }
-                case 130: {
-                  result.hasField16 = input.ReadString(ref result.field16_);
-                  break;
-                }
-                case 160: {
-                  result.hasField20 = input.ReadInt32(ref result.field20_);
-                  break;
-                }
-                case 178: {
-                  input.ReadStringArray(tag, field_name, result.field22_);
-                  break;
-                }
-                case 194: {
-                  result.hasField24 = input.ReadString(ref result.field24_);
-                  break;
-                }
-                case 213: {
-                  result.hasField26 = input.ReadFloat(ref result.field26_);
-                  break;
-                }
-                case 218: {
-                  result.hasField27 = input.ReadString(ref result.field27_);
-                  break;
-                }
-                case 224: {
-                  result.hasField28 = input.ReadInt32(ref result.field28_);
-                  break;
-                }
-                case 234: {
-                  result.hasField29 = input.ReadString(ref result.field29_);
-                  break;
-                }
-                case 250: {
-                  global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.CreateBuilder();
-                  if (result.hasField31) {
-                    subBuilder.MergeFrom(Field31);
-                  }
-                  input.ReadMessage(subBuilder, extensionRegistry);
-                  Field31 = subBuilder.BuildPartial();
-                  break;
-                }
-                case 586:
-                case 584: {
-                  input.ReadInt32Array(tag, field_name, result.field73_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasField11 {
-            get { return result.hasField11; }
-          }
-          public float Field11 {
-            get { return result.Field11; }
-            set { SetField11(value); }
-          }
-          public Builder SetField11(float value) {
-            PrepareBuilder();
-            result.hasField11 = true;
-            result.field11_ = value;
-            return this;
-          }
-          public Builder ClearField11() {
-            PrepareBuilder();
-            result.hasField11 = false;
-            result.field11_ = 0F;
-            return this;
-          }
-
-          public bool HasField26 {
-            get { return result.hasField26; }
-          }
-          public float Field26 {
-            get { return result.Field26; }
-            set { SetField26(value); }
-          }
-          public Builder SetField26(float value) {
-            PrepareBuilder();
-            result.hasField26 = true;
-            result.field26_ = value;
-            return this;
-          }
-          public Builder ClearField26() {
-            PrepareBuilder();
-            result.hasField26 = false;
-            result.field26_ = 0F;
-            return this;
-          }
-
-          public bool HasField12 {
-            get { return result.hasField12; }
-          }
-          public string Field12 {
-            get { return result.Field12; }
-            set { SetField12(value); }
-          }
-          public Builder SetField12(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField12 = true;
-            result.field12_ = value;
-            return this;
-          }
-          public Builder ClearField12() {
-            PrepareBuilder();
-            result.hasField12 = false;
-            result.field12_ = "";
-            return this;
-          }
-
-          public bool HasField13 {
-            get { return result.hasField13; }
-          }
-          public string Field13 {
-            get { return result.Field13; }
-            set { SetField13(value); }
-          }
-          public Builder SetField13(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField13 = true;
-            result.field13_ = value;
-            return this;
-          }
-          public Builder ClearField13() {
-            PrepareBuilder();
-            result.hasField13 = false;
-            result.field13_ = "";
-            return this;
-          }
-
-          public pbc::IPopsicleList<string> Field14List {
-            get { return PrepareBuilder().field14_; }
-          }
-          public int Field14Count {
-            get { return result.Field14Count; }
-          }
-          public string GetField14(int index) {
-            return result.GetField14(index);
-          }
-          public Builder SetField14(int index, string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field14_[index] = value;
-            return this;
-          }
-          public Builder AddField14(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field14_.Add(value);
-            return this;
-          }
-          public Builder AddRangeField14(scg::IEnumerable<string> values) {
-            PrepareBuilder();
-            result.field14_.Add(values);
-            return this;
-          }
-          public Builder ClearField14() {
-            PrepareBuilder();
-            result.field14_.Clear();
-            return this;
-          }
-
-          public bool HasField15 {
-            get { return result.hasField15; }
-          }
-          public ulong Field15 {
-            get { return result.Field15; }
-            set { SetField15(value); }
-          }
-          public Builder SetField15(ulong value) {
-            PrepareBuilder();
-            result.hasField15 = true;
-            result.field15_ = value;
-            return this;
-          }
-          public Builder ClearField15() {
-            PrepareBuilder();
-            result.hasField15 = false;
-            result.field15_ = 0UL;
-            return this;
-          }
-
-          public bool HasField5 {
-            get { return result.hasField5; }
-          }
-          public int Field5 {
-            get { return result.Field5; }
-            set { SetField5(value); }
-          }
-          public Builder SetField5(int value) {
-            PrepareBuilder();
-            result.hasField5 = true;
-            result.field5_ = value;
-            return this;
-          }
-          public Builder ClearField5() {
-            PrepareBuilder();
-            result.hasField5 = false;
-            result.field5_ = 0;
-            return this;
-          }
-
-          public bool HasField27 {
-            get { return result.hasField27; }
-          }
-          public string Field27 {
-            get { return result.Field27; }
-            set { SetField27(value); }
-          }
-          public Builder SetField27(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField27 = true;
-            result.field27_ = value;
-            return this;
-          }
-          public Builder ClearField27() {
-            PrepareBuilder();
-            result.hasField27 = false;
-            result.field27_ = "";
-            return this;
-          }
-
-          public bool HasField28 {
-            get { return result.hasField28; }
-          }
-          public int Field28 {
-            get { return result.Field28; }
-            set { SetField28(value); }
-          }
-          public Builder SetField28(int value) {
-            PrepareBuilder();
-            result.hasField28 = true;
-            result.field28_ = value;
-            return this;
-          }
-          public Builder ClearField28() {
-            PrepareBuilder();
-            result.hasField28 = false;
-            result.field28_ = 0;
-            return this;
-          }
-
-          public bool HasField29 {
-            get { return result.hasField29; }
-          }
-          public string Field29 {
-            get { return result.Field29; }
-            set { SetField29(value); }
-          }
-          public Builder SetField29(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField29 = true;
-            result.field29_ = value;
-            return this;
-          }
-          public Builder ClearField29() {
-            PrepareBuilder();
-            result.hasField29 = false;
-            result.field29_ = "";
-            return this;
-          }
-
-          public bool HasField16 {
-            get { return result.hasField16; }
-          }
-          public string Field16 {
-            get { return result.Field16; }
-            set { SetField16(value); }
-          }
-          public Builder SetField16(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField16 = true;
-            result.field16_ = value;
-            return this;
-          }
-          public Builder ClearField16() {
-            PrepareBuilder();
-            result.hasField16 = false;
-            result.field16_ = "";
-            return this;
-          }
-
-          public pbc::IPopsicleList<string> Field22List {
-            get { return PrepareBuilder().field22_; }
-          }
-          public int Field22Count {
-            get { return result.Field22Count; }
-          }
-          public string GetField22(int index) {
-            return result.GetField22(index);
-          }
-          public Builder SetField22(int index, string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field22_[index] = value;
-            return this;
-          }
-          public Builder AddField22(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field22_.Add(value);
-            return this;
-          }
-          public Builder AddRangeField22(scg::IEnumerable<string> values) {
-            PrepareBuilder();
-            result.field22_.Add(values);
-            return this;
-          }
-          public Builder ClearField22() {
-            PrepareBuilder();
-            result.field22_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<int> Field73List {
-            get { return PrepareBuilder().field73_; }
-          }
-          public int Field73Count {
-            get { return result.Field73Count; }
-          }
-          public int GetField73(int index) {
-            return result.GetField73(index);
-          }
-          public Builder SetField73(int index, int value) {
-            PrepareBuilder();
-            result.field73_[index] = value;
-            return this;
-          }
-          public Builder AddField73(int value) {
-            PrepareBuilder();
-            result.field73_.Add(value);
-            return this;
-          }
-          public Builder AddRangeField73(scg::IEnumerable<int> values) {
-            PrepareBuilder();
-            result.field73_.Add(values);
-            return this;
-          }
-          public Builder ClearField73() {
-            PrepareBuilder();
-            result.field73_.Clear();
-            return this;
-          }
-
-          public bool HasField20 {
-            get { return result.hasField20; }
-          }
-          public int Field20 {
-            get { return result.Field20; }
-            set { SetField20(value); }
-          }
-          public Builder SetField20(int value) {
-            PrepareBuilder();
-            result.hasField20 = true;
-            result.field20_ = value;
-            return this;
-          }
-          public Builder ClearField20() {
-            PrepareBuilder();
-            result.hasField20 = false;
-            result.field20_ = 0;
-            return this;
-          }
-
-          public bool HasField24 {
-            get { return result.hasField24; }
-          }
-          public string Field24 {
-            get { return result.Field24; }
-            set { SetField24(value); }
-          }
-          public Builder SetField24(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField24 = true;
-            result.field24_ = value;
-            return this;
-          }
-          public Builder ClearField24() {
-            PrepareBuilder();
-            result.hasField24 = false;
-            result.field24_ = "";
-            return this;
-          }
-
-          public bool HasField31 {
-           get { return result.hasField31; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage Field31 {
-            get { return result.Field31; }
-            set { SetField31(value); }
-          }
-          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasField31 = true;
-            result.field31_ = value;
-            return this;
-          }
-          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.hasField31 = true;
-            result.field31_ = builderForValue.Build();
-            return this;
-          }
-          public Builder MergeField31(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            if (result.hasField31 &&
-                result.field31_ != global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance) {
-                result.field31_ = global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.CreateBuilder(result.field31_).MergeFrom(value).BuildPartial();
-            } else {
-              result.field31_ = value;
-            }
-            result.hasField31 = true;
-            return this;
-          }
-          public Builder ClearField31() {
-            PrepareBuilder();
-            result.hasField31 = false;
-            result.field31_ = null;
-            return this;
-          }
-        }
-        static Group1() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private string field1_ = "";
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public string Field1 {
-      get { return field1_; }
-    }
-
-    public const int Field3FieldNumber = 3;
-    private bool hasField3;
-    private long field3_;
-    public bool HasField3 {
-      get { return hasField3; }
-    }
-    public long Field3 {
-      get { return field3_; }
-    }
-
-    public const int Field4FieldNumber = 4;
-    private bool hasField4;
-    private long field4_;
-    public bool HasField4 {
-      get { return hasField4; }
-    }
-    public long Field4 {
-      get { return field4_; }
-    }
-
-    public const int Field30FieldNumber = 30;
-    private bool hasField30;
-    private long field30_;
-    public bool HasField30 {
-      get { return hasField30; }
-    }
-    public long Field30 {
-      get { return field30_; }
-    }
-
-    public const int Field75FieldNumber = 75;
-    private bool hasField75;
-    private bool field75_;
-    public bool HasField75 {
-      get { return hasField75; }
-    }
-    public bool Field75 {
-      get { return field75_; }
-    }
-
-    public const int Field6FieldNumber = 6;
-    private bool hasField6;
-    private string field6_ = "";
-    public bool HasField6 {
-      get { return hasField6; }
-    }
-    public string Field6 {
-      get { return field6_; }
-    }
-
-    public const int Field2FieldNumber = 2;
-    private bool hasField2;
-    private pb::ByteString field2_ = pb::ByteString.Empty;
-    public bool HasField2 {
-      get { return hasField2; }
-    }
-    public pb::ByteString Field2 {
-      get { return field2_; }
-    }
-
-    public const int Field21FieldNumber = 21;
-    private bool hasField21;
-    private int field21_;
-    public bool HasField21 {
-      get { return hasField21; }
-    }
-    public int Field21 {
-      get { return field21_; }
-    }
-
-    public const int Field71FieldNumber = 71;
-    private bool hasField71;
-    private int field71_;
-    public bool HasField71 {
-      get { return hasField71; }
-    }
-    public int Field71 {
-      get { return field71_; }
-    }
-
-    public const int Field25FieldNumber = 25;
-    private bool hasField25;
-    private float field25_;
-    public bool HasField25 {
-      get { return hasField25; }
-    }
-    public float Field25 {
-      get { return field25_; }
-    }
-
-    public const int Field109FieldNumber = 109;
-    private bool hasField109;
-    private int field109_;
-    public bool HasField109 {
-      get { return hasField109; }
-    }
-    public int Field109 {
-      get { return field109_; }
-    }
-
-    public const int Field210FieldNumber = 210;
-    private bool hasField210;
-    private int field210_;
-    public bool HasField210 {
-      get { return hasField210; }
-    }
-    public int Field210 {
-      get { return field210_; }
-    }
-
-    public const int Field211FieldNumber = 211;
-    private bool hasField211;
-    private int field211_;
-    public bool HasField211 {
-      get { return hasField211; }
-    }
-    public int Field211 {
-      get { return field211_; }
-    }
-
-    public const int Field212FieldNumber = 212;
-    private bool hasField212;
-    private int field212_;
-    public bool HasField212 {
-      get { return hasField212; }
-    }
-    public int Field212 {
-      get { return field212_; }
-    }
-
-    public const int Field213FieldNumber = 213;
-    private bool hasField213;
-    private int field213_;
-    public bool HasField213 {
-      get { return hasField213; }
-    }
-    public int Field213 {
-      get { return field213_; }
-    }
-
-    public const int Field216FieldNumber = 216;
-    private bool hasField216;
-    private int field216_;
-    public bool HasField216 {
-      get { return hasField216; }
-    }
-    public int Field216 {
-      get { return field216_; }
-    }
-
-    public const int Field217FieldNumber = 217;
-    private bool hasField217;
-    private int field217_;
-    public bool HasField217 {
-      get { return hasField217; }
-    }
-    public int Field217 {
-      get { return field217_; }
-    }
-
-    public const int Field218FieldNumber = 218;
-    private bool hasField218;
-    private int field218_;
-    public bool HasField218 {
-      get { return hasField218; }
-    }
-    public int Field218 {
-      get { return field218_; }
-    }
-
-    public const int Field220FieldNumber = 220;
-    private bool hasField220;
-    private int field220_;
-    public bool HasField220 {
-      get { return hasField220; }
-    }
-    public int Field220 {
-      get { return field220_; }
-    }
-
-    public const int Field221FieldNumber = 221;
-    private bool hasField221;
-    private int field221_;
-    public bool HasField221 {
-      get { return hasField221; }
-    }
-    public int Field221 {
-      get { return field221_; }
-    }
-
-    public const int Field222FieldNumber = 222;
-    private bool hasField222;
-    private float field222_;
-    public bool HasField222 {
-      get { return hasField222; }
-    }
-    public float Field222 {
-      get { return field222_; }
-    }
-
-    public const int Field63FieldNumber = 63;
-    private bool hasField63;
-    private int field63_;
-    public bool HasField63 {
-      get { return hasField63; }
-    }
-    public int Field63 {
-      get { return field63_; }
-    }
-
-    public const int Group1FieldNumber = 10;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> group1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> Group1List {
-      get { return group1_; }
-    }
-    public int Group1Count {
-      get { return group1_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 GetGroup1(int index) {
-      return group1_[index];
-    }
-
-    public const int Field128FieldNumber = 128;
-    private pbc::PopsicleList<string> field128_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> Field128List {
-      get { return pbc::Lists.AsReadOnly(field128_); }
-    }
-    public int Field128Count {
-      get { return field128_.Count; }
-    }
-    public string GetField128(int index) {
-      return field128_[index];
-    }
-
-    public const int Field131FieldNumber = 131;
-    private bool hasField131;
-    private long field131_;
-    public bool HasField131 {
-      get { return hasField131; }
-    }
-    public long Field131 {
-      get { return field131_; }
-    }
-
-    public const int Field127FieldNumber = 127;
-    private pbc::PopsicleList<string> field127_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> Field127List {
-      get { return pbc::Lists.AsReadOnly(field127_); }
-    }
-    public int Field127Count {
-      get { return field127_.Count; }
-    }
-    public string GetField127(int index) {
-      return field127_[index];
-    }
-
-    public const int Field129FieldNumber = 129;
-    private bool hasField129;
-    private int field129_;
-    public bool HasField129 {
-      get { return hasField129; }
-    }
-    public int Field129 {
-      get { return field129_; }
-    }
-
-    public const int Field130FieldNumber = 130;
-    private pbc::PopsicleList<long> field130_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> Field130List {
-      get { return pbc::Lists.AsReadOnly(field130_); }
-    }
-    public int Field130Count {
-      get { return field130_.Count; }
-    }
-    public long GetField130(int index) {
-      return field130_[index];
-    }
-
-    public const int Field205FieldNumber = 205;
-    private bool hasField205;
-    private bool field205_;
-    public bool HasField205 {
-      get { return hasField205; }
-    }
-    public bool Field205 {
-      get { return field205_; }
-    }
-
-    public const int Field206FieldNumber = 206;
-    private bool hasField206;
-    private bool field206_;
-    public bool HasField206 {
-      get { return hasField206; }
-    }
-    public bool Field206 {
-      get { return field206_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _speedMessage2FieldNames;
-      if (hasField1) {
-        output.WriteString(1, field_names[0], Field1);
-      }
-      if (hasField2) {
-        output.WriteBytes(2, field_names[7], Field2);
-      }
-      if (hasField3) {
-        output.WriteInt64(3, field_names[22], Field3);
-      }
-      if (hasField4) {
-        output.WriteInt64(4, field_names[24], Field4);
-      }
-      if (hasField6) {
-        output.WriteString(6, field_names[25], Field6);
-      }
-      if (group1_.Count > 0) {
-        output.WriteGroupArray(10, field_names[29], group1_);
-      }
-      if (hasField21) {
-        output.WriteInt32(21, field_names[10], Field21);
-      }
-      if (hasField25) {
-        output.WriteFloat(25, field_names[21], Field25);
-      }
-      if (hasField30) {
-        output.WriteInt64(30, field_names[23], Field30);
-      }
-      if (hasField63) {
-        output.WriteInt32(63, field_names[26], Field63);
-      }
-      if (hasField71) {
-        output.WriteInt32(71, field_names[27], Field71);
-      }
-      if (hasField75) {
-        output.WriteBool(75, field_names[28], Field75);
-      }
-      if (hasField109) {
-        output.WriteInt32(109, field_names[1], Field109);
-      }
-      if (field127_.Count > 0) {
-        output.WriteStringArray(127, field_names[2], field127_);
-      }
-      if (field128_.Count > 0) {
-        output.WriteStringArray(128, field_names[3], field128_);
-      }
-      if (hasField129) {
-        output.WriteInt32(129, field_names[4], Field129);
-      }
-      if (field130_.Count > 0) {
-        output.WriteInt64Array(130, field_names[5], field130_);
-      }
-      if (hasField131) {
-        output.WriteInt64(131, field_names[6], Field131);
-      }
-      if (hasField205) {
-        output.WriteBool(205, field_names[8], Field205);
-      }
-      if (hasField206) {
-        output.WriteBool(206, field_names[9], Field206);
-      }
-      if (hasField210) {
-        output.WriteInt32(210, field_names[11], Field210);
-      }
-      if (hasField211) {
-        output.WriteInt32(211, field_names[12], Field211);
-      }
-      if (hasField212) {
-        output.WriteInt32(212, field_names[13], Field212);
-      }
-      if (hasField213) {
-        output.WriteInt32(213, field_names[14], Field213);
-      }
-      if (hasField216) {
-        output.WriteInt32(216, field_names[15], Field216);
-      }
-      if (hasField217) {
-        output.WriteInt32(217, field_names[16], Field217);
-      }
-      if (hasField218) {
-        output.WriteInt32(218, field_names[17], Field218);
-      }
-      if (hasField220) {
-        output.WriteInt32(220, field_names[18], Field220);
-      }
-      if (hasField221) {
-        output.WriteInt32(221, field_names[19], Field221);
-      }
-      if (hasField222) {
-        output.WriteFloat(222, field_names[20], Field222);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasField1) {
-        size += pb::CodedOutputStream.ComputeStringSize(1, Field1);
-      }
-      if (hasField3) {
-        size += pb::CodedOutputStream.ComputeInt64Size(3, Field3);
-      }
-      if (hasField4) {
-        size += pb::CodedOutputStream.ComputeInt64Size(4, Field4);
-      }
-      if (hasField30) {
-        size += pb::CodedOutputStream.ComputeInt64Size(30, Field30);
-      }
-      if (hasField75) {
-        size += pb::CodedOutputStream.ComputeBoolSize(75, Field75);
-      }
-      if (hasField6) {
-        size += pb::CodedOutputStream.ComputeStringSize(6, Field6);
-      }
-      if (hasField2) {
-        size += pb::CodedOutputStream.ComputeBytesSize(2, Field2);
-      }
-      if (hasField21) {
-        size += pb::CodedOutputStream.ComputeInt32Size(21, Field21);
-      }
-      if (hasField71) {
-        size += pb::CodedOutputStream.ComputeInt32Size(71, Field71);
-      }
-      if (hasField25) {
-        size += pb::CodedOutputStream.ComputeFloatSize(25, Field25);
-      }
-      if (hasField109) {
-        size += pb::CodedOutputStream.ComputeInt32Size(109, Field109);
-      }
-      if (hasField210) {
-        size += pb::CodedOutputStream.ComputeInt32Size(210, Field210);
-      }
-      if (hasField211) {
-        size += pb::CodedOutputStream.ComputeInt32Size(211, Field211);
-      }
-      if (hasField212) {
-        size += pb::CodedOutputStream.ComputeInt32Size(212, Field212);
-      }
-      if (hasField213) {
-        size += pb::CodedOutputStream.ComputeInt32Size(213, Field213);
-      }
-      if (hasField216) {
-        size += pb::CodedOutputStream.ComputeInt32Size(216, Field216);
-      }
-      if (hasField217) {
-        size += pb::CodedOutputStream.ComputeInt32Size(217, Field217);
-      }
-      if (hasField218) {
-        size += pb::CodedOutputStream.ComputeInt32Size(218, Field218);
-      }
-      if (hasField220) {
-        size += pb::CodedOutputStream.ComputeInt32Size(220, Field220);
-      }
-      if (hasField221) {
-        size += pb::CodedOutputStream.ComputeInt32Size(221, Field221);
-      }
-      if (hasField222) {
-        size += pb::CodedOutputStream.ComputeFloatSize(222, Field222);
-      }
-      if (hasField63) {
-        size += pb::CodedOutputStream.ComputeInt32Size(63, Field63);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 element in Group1List) {
-        size += pb::CodedOutputStream.ComputeGroupSize(10, element);
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in Field128List) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * field128_.Count;
-      }
-      if (hasField131) {
-        size += pb::CodedOutputStream.ComputeInt64Size(131, Field131);
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in Field127List) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * field127_.Count;
-      }
-      if (hasField129) {
-        size += pb::CodedOutputStream.ComputeInt32Size(129, Field129);
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in Field130List) {
-          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * field130_.Count;
-      }
-      if (hasField205) {
-        size += pb::CodedOutputStream.ComputeBoolSize(205, Field205);
-      }
-      if (hasField206) {
-        size += pb::CodedOutputStream.ComputeBoolSize(206, Field206);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static SpeedMessage2 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SpeedMessage2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage2 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SpeedMessage2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage2 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SpeedMessage2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage2 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SpeedMessage2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SpeedMessage2 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SpeedMessage2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SpeedMessage2 MakeReadOnly() {
-      group1_.MakeReadOnly();
-      field128_.MakeReadOnly();
-      field127_.MakeReadOnly();
-      field130_.MakeReadOnly();
-      return this;
-    }
-
-    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(SpeedMessage2 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage2, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SpeedMessage2 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SpeedMessage2 result;
-
-      private SpeedMessage2 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SpeedMessage2 original = result;
-          result = new SpeedMessage2();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SpeedMessage2 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Descriptor; }
-      }
-
-      public override SpeedMessage2 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.DefaultInstance; }
-      }
-
-      public override SpeedMessage2 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is SpeedMessage2) {
-          return MergeFrom((SpeedMessage2) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(SpeedMessage2 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasField1) {
-          Field1 = other.Field1;
-        }
-        if (other.HasField3) {
-          Field3 = other.Field3;
-        }
-        if (other.HasField4) {
-          Field4 = other.Field4;
-        }
-        if (other.HasField30) {
-          Field30 = other.Field30;
-        }
-        if (other.HasField75) {
-          Field75 = other.Field75;
-        }
-        if (other.HasField6) {
-          Field6 = other.Field6;
-        }
-        if (other.HasField2) {
-          Field2 = other.Field2;
-        }
-        if (other.HasField21) {
-          Field21 = other.Field21;
-        }
-        if (other.HasField71) {
-          Field71 = other.Field71;
-        }
-        if (other.HasField25) {
-          Field25 = other.Field25;
-        }
-        if (other.HasField109) {
-          Field109 = other.Field109;
-        }
-        if (other.HasField210) {
-          Field210 = other.Field210;
-        }
-        if (other.HasField211) {
-          Field211 = other.Field211;
-        }
-        if (other.HasField212) {
-          Field212 = other.Field212;
-        }
-        if (other.HasField213) {
-          Field213 = other.Field213;
-        }
-        if (other.HasField216) {
-          Field216 = other.Field216;
-        }
-        if (other.HasField217) {
-          Field217 = other.Field217;
-        }
-        if (other.HasField218) {
-          Field218 = other.Field218;
-        }
-        if (other.HasField220) {
-          Field220 = other.Field220;
-        }
-        if (other.HasField221) {
-          Field221 = other.Field221;
-        }
-        if (other.HasField222) {
-          Field222 = other.Field222;
-        }
-        if (other.HasField63) {
-          Field63 = other.Field63;
-        }
-        if (other.group1_.Count != 0) {
-          result.group1_.Add(other.group1_);
-        }
-        if (other.field128_.Count != 0) {
-          result.field128_.Add(other.field128_);
-        }
-        if (other.HasField131) {
-          Field131 = other.Field131;
-        }
-        if (other.field127_.Count != 0) {
-          result.field127_.Add(other.field127_);
-        }
-        if (other.HasField129) {
-          Field129 = other.Field129;
-        }
-        if (other.field130_.Count != 0) {
-          result.field130_.Add(other.field130_);
-        }
-        if (other.HasField205) {
-          Field205 = other.Field205;
-        }
-        if (other.HasField206) {
-          Field206 = other.Field206;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_speedMessage2FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _speedMessage2FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              result.hasField1 = input.ReadString(ref result.field1_);
-              break;
-            }
-            case 18: {
-              result.hasField2 = input.ReadBytes(ref result.field2_);
-              break;
-            }
-            case 24: {
-              result.hasField3 = input.ReadInt64(ref result.field3_);
-              break;
-            }
-            case 32: {
-              result.hasField4 = input.ReadInt64(ref result.field4_);
-              break;
-            }
-            case 50: {
-              result.hasField6 = input.ReadString(ref result.field6_);
-              break;
-            }
-            case 83: {
-              input.ReadGroupArray(tag, field_name, result.group1_, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 168: {
-              result.hasField21 = input.ReadInt32(ref result.field21_);
-              break;
-            }
-            case 205: {
-              result.hasField25 = input.ReadFloat(ref result.field25_);
-              break;
-            }
-            case 240: {
-              result.hasField30 = input.ReadInt64(ref result.field30_);
-              break;
-            }
-            case 504: {
-              result.hasField63 = input.ReadInt32(ref result.field63_);
-              break;
-            }
-            case 568: {
-              result.hasField71 = input.ReadInt32(ref result.field71_);
-              break;
-            }
-            case 600: {
-              result.hasField75 = input.ReadBool(ref result.field75_);
-              break;
-            }
-            case 872: {
-              result.hasField109 = input.ReadInt32(ref result.field109_);
-              break;
-            }
-            case 1018: {
-              input.ReadStringArray(tag, field_name, result.field127_);
-              break;
-            }
-            case 1026: {
-              input.ReadStringArray(tag, field_name, result.field128_);
-              break;
-            }
-            case 1032: {
-              result.hasField129 = input.ReadInt32(ref result.field129_);
-              break;
-            }
-            case 1042:
-            case 1040: {
-              input.ReadInt64Array(tag, field_name, result.field130_);
-              break;
-            }
-            case 1048: {
-              result.hasField131 = input.ReadInt64(ref result.field131_);
-              break;
-            }
-            case 1640: {
-              result.hasField205 = input.ReadBool(ref result.field205_);
-              break;
-            }
-            case 1648: {
-              result.hasField206 = input.ReadBool(ref result.field206_);
-              break;
-            }
-            case 1680: {
-              result.hasField210 = input.ReadInt32(ref result.field210_);
-              break;
-            }
-            case 1688: {
-              result.hasField211 = input.ReadInt32(ref result.field211_);
-              break;
-            }
-            case 1696: {
-              result.hasField212 = input.ReadInt32(ref result.field212_);
-              break;
-            }
-            case 1704: {
-              result.hasField213 = input.ReadInt32(ref result.field213_);
-              break;
-            }
-            case 1728: {
-              result.hasField216 = input.ReadInt32(ref result.field216_);
-              break;
-            }
-            case 1736: {
-              result.hasField217 = input.ReadInt32(ref result.field217_);
-              break;
-            }
-            case 1744: {
-              result.hasField218 = input.ReadInt32(ref result.field218_);
-              break;
-            }
-            case 1760: {
-              result.hasField220 = input.ReadInt32(ref result.field220_);
-              break;
-            }
-            case 1768: {
-              result.hasField221 = input.ReadInt32(ref result.field221_);
-              break;
-            }
-            case 1781: {
-              result.hasField222 = input.ReadFloat(ref result.field222_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public string Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = "";
-        return this;
-      }
-
-      public bool HasField3 {
-        get { return result.hasField3; }
-      }
-      public long Field3 {
-        get { return result.Field3; }
-        set { SetField3(value); }
-      }
-      public Builder SetField3(long value) {
-        PrepareBuilder();
-        result.hasField3 = true;
-        result.field3_ = value;
-        return this;
-      }
-      public Builder ClearField3() {
-        PrepareBuilder();
-        result.hasField3 = false;
-        result.field3_ = 0L;
-        return this;
-      }
-
-      public bool HasField4 {
-        get { return result.hasField4; }
-      }
-      public long Field4 {
-        get { return result.Field4; }
-        set { SetField4(value); }
-      }
-      public Builder SetField4(long value) {
-        PrepareBuilder();
-        result.hasField4 = true;
-        result.field4_ = value;
-        return this;
-      }
-      public Builder ClearField4() {
-        PrepareBuilder();
-        result.hasField4 = false;
-        result.field4_ = 0L;
-        return this;
-      }
-
-      public bool HasField30 {
-        get { return result.hasField30; }
-      }
-      public long Field30 {
-        get { return result.Field30; }
-        set { SetField30(value); }
-      }
-      public Builder SetField30(long value) {
-        PrepareBuilder();
-        result.hasField30 = true;
-        result.field30_ = value;
-        return this;
-      }
-      public Builder ClearField30() {
-        PrepareBuilder();
-        result.hasField30 = false;
-        result.field30_ = 0L;
-        return this;
-      }
-
-      public bool HasField75 {
-        get { return result.hasField75; }
-      }
-      public bool Field75 {
-        get { return result.Field75; }
-        set { SetField75(value); }
-      }
-      public Builder SetField75(bool value) {
-        PrepareBuilder();
-        result.hasField75 = true;
-        result.field75_ = value;
-        return this;
-      }
-      public Builder ClearField75() {
-        PrepareBuilder();
-        result.hasField75 = false;
-        result.field75_ = false;
-        return this;
-      }
-
-      public bool HasField6 {
-        get { return result.hasField6; }
-      }
-      public string Field6 {
-        get { return result.Field6; }
-        set { SetField6(value); }
-      }
-      public Builder SetField6(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField6 = true;
-        result.field6_ = value;
-        return this;
-      }
-      public Builder ClearField6() {
-        PrepareBuilder();
-        result.hasField6 = false;
-        result.field6_ = "";
-        return this;
-      }
-
-      public bool HasField2 {
-        get { return result.hasField2; }
-      }
-      public pb::ByteString Field2 {
-        get { return result.Field2; }
-        set { SetField2(value); }
-      }
-      public Builder SetField2(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField2 = true;
-        result.field2_ = value;
-        return this;
-      }
-      public Builder ClearField2() {
-        PrepareBuilder();
-        result.hasField2 = false;
-        result.field2_ = pb::ByteString.Empty;
-        return this;
-      }
-
-      public bool HasField21 {
-        get { return result.hasField21; }
-      }
-      public int Field21 {
-        get { return result.Field21; }
-        set { SetField21(value); }
-      }
-      public Builder SetField21(int value) {
-        PrepareBuilder();
-        result.hasField21 = true;
-        result.field21_ = value;
-        return this;
-      }
-      public Builder ClearField21() {
-        PrepareBuilder();
-        result.hasField21 = false;
-        result.field21_ = 0;
-        return this;
-      }
-
-      public bool HasField71 {
-        get { return result.hasField71; }
-      }
-      public int Field71 {
-        get { return result.Field71; }
-        set { SetField71(value); }
-      }
-      public Builder SetField71(int value) {
-        PrepareBuilder();
-        result.hasField71 = true;
-        result.field71_ = value;
-        return this;
-      }
-      public Builder ClearField71() {
-        PrepareBuilder();
-        result.hasField71 = false;
-        result.field71_ = 0;
-        return this;
-      }
-
-      public bool HasField25 {
-        get { return result.hasField25; }
-      }
-      public float Field25 {
-        get { return result.Field25; }
-        set { SetField25(value); }
-      }
-      public Builder SetField25(float value) {
-        PrepareBuilder();
-        result.hasField25 = true;
-        result.field25_ = value;
-        return this;
-      }
-      public Builder ClearField25() {
-        PrepareBuilder();
-        result.hasField25 = false;
-        result.field25_ = 0F;
-        return this;
-      }
-
-      public bool HasField109 {
-        get { return result.hasField109; }
-      }
-      public int Field109 {
-        get { return result.Field109; }
-        set { SetField109(value); }
-      }
-      public Builder SetField109(int value) {
-        PrepareBuilder();
-        result.hasField109 = true;
-        result.field109_ = value;
-        return this;
-      }
-      public Builder ClearField109() {
-        PrepareBuilder();
-        result.hasField109 = false;
-        result.field109_ = 0;
-        return this;
-      }
-
-      public bool HasField210 {
-        get { return result.hasField210; }
-      }
-      public int Field210 {
-        get { return result.Field210; }
-        set { SetField210(value); }
-      }
-      public Builder SetField210(int value) {
-        PrepareBuilder();
-        result.hasField210 = true;
-        result.field210_ = value;
-        return this;
-      }
-      public Builder ClearField210() {
-        PrepareBuilder();
-        result.hasField210 = false;
-        result.field210_ = 0;
-        return this;
-      }
-
-      public bool HasField211 {
-        get { return result.hasField211; }
-      }
-      public int Field211 {
-        get { return result.Field211; }
-        set { SetField211(value); }
-      }
-      public Builder SetField211(int value) {
-        PrepareBuilder();
-        result.hasField211 = true;
-        result.field211_ = value;
-        return this;
-      }
-      public Builder ClearField211() {
-        PrepareBuilder();
-        result.hasField211 = false;
-        result.field211_ = 0;
-        return this;
-      }
-
-      public bool HasField212 {
-        get { return result.hasField212; }
-      }
-      public int Field212 {
-        get { return result.Field212; }
-        set { SetField212(value); }
-      }
-      public Builder SetField212(int value) {
-        PrepareBuilder();
-        result.hasField212 = true;
-        result.field212_ = value;
-        return this;
-      }
-      public Builder ClearField212() {
-        PrepareBuilder();
-        result.hasField212 = false;
-        result.field212_ = 0;
-        return this;
-      }
-
-      public bool HasField213 {
-        get { return result.hasField213; }
-      }
-      public int Field213 {
-        get { return result.Field213; }
-        set { SetField213(value); }
-      }
-      public Builder SetField213(int value) {
-        PrepareBuilder();
-        result.hasField213 = true;
-        result.field213_ = value;
-        return this;
-      }
-      public Builder ClearField213() {
-        PrepareBuilder();
-        result.hasField213 = false;
-        result.field213_ = 0;
-        return this;
-      }
-
-      public bool HasField216 {
-        get { return result.hasField216; }
-      }
-      public int Field216 {
-        get { return result.Field216; }
-        set { SetField216(value); }
-      }
-      public Builder SetField216(int value) {
-        PrepareBuilder();
-        result.hasField216 = true;
-        result.field216_ = value;
-        return this;
-      }
-      public Builder ClearField216() {
-        PrepareBuilder();
-        result.hasField216 = false;
-        result.field216_ = 0;
-        return this;
-      }
-
-      public bool HasField217 {
-        get { return result.hasField217; }
-      }
-      public int Field217 {
-        get { return result.Field217; }
-        set { SetField217(value); }
-      }
-      public Builder SetField217(int value) {
-        PrepareBuilder();
-        result.hasField217 = true;
-        result.field217_ = value;
-        return this;
-      }
-      public Builder ClearField217() {
-        PrepareBuilder();
-        result.hasField217 = false;
-        result.field217_ = 0;
-        return this;
-      }
-
-      public bool HasField218 {
-        get { return result.hasField218; }
-      }
-      public int Field218 {
-        get { return result.Field218; }
-        set { SetField218(value); }
-      }
-      public Builder SetField218(int value) {
-        PrepareBuilder();
-        result.hasField218 = true;
-        result.field218_ = value;
-        return this;
-      }
-      public Builder ClearField218() {
-        PrepareBuilder();
-        result.hasField218 = false;
-        result.field218_ = 0;
-        return this;
-      }
-
-      public bool HasField220 {
-        get { return result.hasField220; }
-      }
-      public int Field220 {
-        get { return result.Field220; }
-        set { SetField220(value); }
-      }
-      public Builder SetField220(int value) {
-        PrepareBuilder();
-        result.hasField220 = true;
-        result.field220_ = value;
-        return this;
-      }
-      public Builder ClearField220() {
-        PrepareBuilder();
-        result.hasField220 = false;
-        result.field220_ = 0;
-        return this;
-      }
-
-      public bool HasField221 {
-        get { return result.hasField221; }
-      }
-      public int Field221 {
-        get { return result.Field221; }
-        set { SetField221(value); }
-      }
-      public Builder SetField221(int value) {
-        PrepareBuilder();
-        result.hasField221 = true;
-        result.field221_ = value;
-        return this;
-      }
-      public Builder ClearField221() {
-        PrepareBuilder();
-        result.hasField221 = false;
-        result.field221_ = 0;
-        return this;
-      }
-
-      public bool HasField222 {
-        get { return result.hasField222; }
-      }
-      public float Field222 {
-        get { return result.Field222; }
-        set { SetField222(value); }
-      }
-      public Builder SetField222(float value) {
-        PrepareBuilder();
-        result.hasField222 = true;
-        result.field222_ = value;
-        return this;
-      }
-      public Builder ClearField222() {
-        PrepareBuilder();
-        result.hasField222 = false;
-        result.field222_ = 0F;
-        return this;
-      }
-
-      public bool HasField63 {
-        get { return result.hasField63; }
-      }
-      public int Field63 {
-        get { return result.Field63; }
-        set { SetField63(value); }
-      }
-      public Builder SetField63(int value) {
-        PrepareBuilder();
-        result.hasField63 = true;
-        result.field63_ = value;
-        return this;
-      }
-      public Builder ClearField63() {
-        PrepareBuilder();
-        result.hasField63 = false;
-        result.field63_ = 0;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> Group1List {
-        get { return PrepareBuilder().group1_; }
-      }
-      public int Group1Count {
-        get { return result.Group1Count; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 GetGroup1(int index) {
-        return result.GetGroup1(index);
-      }
-      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.group1_[index] = value;
-        return this;
-      }
-      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.group1_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.group1_.Add(value);
-        return this;
-      }
-      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.group1_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> values) {
-        PrepareBuilder();
-        result.group1_.Add(values);
-        return this;
-      }
-      public Builder ClearGroup1() {
-        PrepareBuilder();
-        result.group1_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> Field128List {
-        get { return PrepareBuilder().field128_; }
-      }
-      public int Field128Count {
-        get { return result.Field128Count; }
-      }
-      public string GetField128(int index) {
-        return result.GetField128(index);
-      }
-      public Builder SetField128(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field128_[index] = value;
-        return this;
-      }
-      public Builder AddField128(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field128_.Add(value);
-        return this;
-      }
-      public Builder AddRangeField128(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.field128_.Add(values);
-        return this;
-      }
-      public Builder ClearField128() {
-        PrepareBuilder();
-        result.field128_.Clear();
-        return this;
-      }
-
-      public bool HasField131 {
-        get { return result.hasField131; }
-      }
-      public long Field131 {
-        get { return result.Field131; }
-        set { SetField131(value); }
-      }
-      public Builder SetField131(long value) {
-        PrepareBuilder();
-        result.hasField131 = true;
-        result.field131_ = value;
-        return this;
-      }
-      public Builder ClearField131() {
-        PrepareBuilder();
-        result.hasField131 = false;
-        result.field131_ = 0L;
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> Field127List {
-        get { return PrepareBuilder().field127_; }
-      }
-      public int Field127Count {
-        get { return result.Field127Count; }
-      }
-      public string GetField127(int index) {
-        return result.GetField127(index);
-      }
-      public Builder SetField127(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field127_[index] = value;
-        return this;
-      }
-      public Builder AddField127(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.field127_.Add(value);
-        return this;
-      }
-      public Builder AddRangeField127(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.field127_.Add(values);
-        return this;
-      }
-      public Builder ClearField127() {
-        PrepareBuilder();
-        result.field127_.Clear();
-        return this;
-      }
-
-      public bool HasField129 {
-        get { return result.hasField129; }
-      }
-      public int Field129 {
-        get { return result.Field129; }
-        set { SetField129(value); }
-      }
-      public Builder SetField129(int value) {
-        PrepareBuilder();
-        result.hasField129 = true;
-        result.field129_ = value;
-        return this;
-      }
-      public Builder ClearField129() {
-        PrepareBuilder();
-        result.hasField129 = false;
-        result.field129_ = 0;
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> Field130List {
-        get { return PrepareBuilder().field130_; }
-      }
-      public int Field130Count {
-        get { return result.Field130Count; }
-      }
-      public long GetField130(int index) {
-        return result.GetField130(index);
-      }
-      public Builder SetField130(int index, long value) {
-        PrepareBuilder();
-        result.field130_[index] = value;
-        return this;
-      }
-      public Builder AddField130(long value) {
-        PrepareBuilder();
-        result.field130_.Add(value);
-        return this;
-      }
-      public Builder AddRangeField130(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.field130_.Add(values);
-        return this;
-      }
-      public Builder ClearField130() {
-        PrepareBuilder();
-        result.field130_.Clear();
-        return this;
-      }
-
-      public bool HasField205 {
-        get { return result.hasField205; }
-      }
-      public bool Field205 {
-        get { return result.Field205; }
-        set { SetField205(value); }
-      }
-      public Builder SetField205(bool value) {
-        PrepareBuilder();
-        result.hasField205 = true;
-        result.field205_ = value;
-        return this;
-      }
-      public Builder ClearField205() {
-        PrepareBuilder();
-        result.hasField205 = false;
-        result.field205_ = false;
-        return this;
-      }
-
-      public bool HasField206 {
-        get { return result.hasField206; }
-      }
-      public bool Field206 {
-        get { return result.Field206; }
-        set { SetField206(value); }
-      }
-      public Builder SetField206(bool value) {
-        PrepareBuilder();
-        result.hasField206 = true;
-        result.field206_ = value;
-        return this;
-      }
-      public Builder ClearField206() {
-        PrepareBuilder();
-        result.hasField206 = false;
-        result.field206_ = false;
-        return this;
-      }
-    }
-    static SpeedMessage2() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SpeedMessage2GroupedMessage : pb::GeneratedMessage<SpeedMessage2GroupedMessage, SpeedMessage2GroupedMessage.Builder> {
-    private SpeedMessage2GroupedMessage() { }
-    private static readonly SpeedMessage2GroupedMessage defaultInstance = new SpeedMessage2GroupedMessage().MakeReadOnly();
-    private static readonly string[] _speedMessage2GroupedMessageFieldNames = new string[] { "field1", "field10", "field11", "field2", "field3", "field4", "field5", "field6", "field7", "field8", "field9" };
-    private static readonly uint[] _speedMessage2GroupedMessageFieldTags = new uint[] { 13, 85, 88, 21, 29, 32, 40, 48, 56, 69, 72 };
-    public static SpeedMessage2GroupedMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SpeedMessage2GroupedMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SpeedMessage2GroupedMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage2GroupedMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage2GroupedMessage, SpeedMessage2GroupedMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.internal__static_benchmarks_SpeedMessage2GroupedMessage__FieldAccessorTable; }
-    }
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private float field1_;
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public float Field1 {
-      get { return field1_; }
-    }
-
-    public const int Field2FieldNumber = 2;
-    private bool hasField2;
-    private float field2_;
-    public bool HasField2 {
-      get { return hasField2; }
-    }
-    public float Field2 {
-      get { return field2_; }
-    }
-
-    public const int Field3FieldNumber = 3;
-    private bool hasField3;
-    private float field3_;
-    public bool HasField3 {
-      get { return hasField3; }
-    }
-    public float Field3 {
-      get { return field3_; }
-    }
-
-    public const int Field4FieldNumber = 4;
-    private bool hasField4;
-    private bool field4_;
-    public bool HasField4 {
-      get { return hasField4; }
-    }
-    public bool Field4 {
-      get { return field4_; }
-    }
-
-    public const int Field5FieldNumber = 5;
-    private bool hasField5;
-    private bool field5_;
-    public bool HasField5 {
-      get { return hasField5; }
-    }
-    public bool Field5 {
-      get { return field5_; }
-    }
-
-    public const int Field6FieldNumber = 6;
-    private bool hasField6;
-    private bool field6_ = true;
-    public bool HasField6 {
-      get { return hasField6; }
-    }
-    public bool Field6 {
-      get { return field6_; }
-    }
-
-    public const int Field7FieldNumber = 7;
-    private bool hasField7;
-    private bool field7_;
-    public bool HasField7 {
-      get { return hasField7; }
-    }
-    public bool Field7 {
-      get { return field7_; }
-    }
-
-    public const int Field8FieldNumber = 8;
-    private bool hasField8;
-    private float field8_;
-    public bool HasField8 {
-      get { return hasField8; }
-    }
-    public float Field8 {
-      get { return field8_; }
-    }
-
-    public const int Field9FieldNumber = 9;
-    private bool hasField9;
-    private bool field9_;
-    public bool HasField9 {
-      get { return hasField9; }
-    }
-    public bool Field9 {
-      get { return field9_; }
-    }
-
-    public const int Field10FieldNumber = 10;
-    private bool hasField10;
-    private float field10_;
-    public bool HasField10 {
-      get { return hasField10; }
-    }
-    public float Field10 {
-      get { return field10_; }
-    }
-
-    public const int Field11FieldNumber = 11;
-    private bool hasField11;
-    private long field11_;
-    public bool HasField11 {
-      get { return hasField11; }
-    }
-    public long Field11 {
-      get { return field11_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _speedMessage2GroupedMessageFieldNames;
-      if (hasField1) {
-        output.WriteFloat(1, field_names[0], Field1);
-      }
-      if (hasField2) {
-        output.WriteFloat(2, field_names[3], Field2);
-      }
-      if (hasField3) {
-        output.WriteFloat(3, field_names[4], Field3);
-      }
-      if (hasField4) {
-        output.WriteBool(4, field_names[5], Field4);
-      }
-      if (hasField5) {
-        output.WriteBool(5, field_names[6], Field5);
-      }
-      if (hasField6) {
-        output.WriteBool(6, field_names[7], Field6);
-      }
-      if (hasField7) {
-        output.WriteBool(7, field_names[8], Field7);
-      }
-      if (hasField8) {
-        output.WriteFloat(8, field_names[9], Field8);
-      }
-      if (hasField9) {
-        output.WriteBool(9, field_names[10], Field9);
-      }
-      if (hasField10) {
-        output.WriteFloat(10, field_names[1], Field10);
-      }
-      if (hasField11) {
-        output.WriteInt64(11, field_names[2], Field11);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasField1) {
-        size += pb::CodedOutputStream.ComputeFloatSize(1, Field1);
-      }
-      if (hasField2) {
-        size += pb::CodedOutputStream.ComputeFloatSize(2, Field2);
-      }
-      if (hasField3) {
-        size += pb::CodedOutputStream.ComputeFloatSize(3, Field3);
-      }
-      if (hasField4) {
-        size += pb::CodedOutputStream.ComputeBoolSize(4, Field4);
-      }
-      if (hasField5) {
-        size += pb::CodedOutputStream.ComputeBoolSize(5, Field5);
-      }
-      if (hasField6) {
-        size += pb::CodedOutputStream.ComputeBoolSize(6, Field6);
-      }
-      if (hasField7) {
-        size += pb::CodedOutputStream.ComputeBoolSize(7, Field7);
-      }
-      if (hasField8) {
-        size += pb::CodedOutputStream.ComputeFloatSize(8, Field8);
-      }
-      if (hasField9) {
-        size += pb::CodedOutputStream.ComputeBoolSize(9, Field9);
-      }
-      if (hasField10) {
-        size += pb::CodedOutputStream.ComputeFloatSize(10, Field10);
-      }
-      if (hasField11) {
-        size += pb::CodedOutputStream.ComputeInt64Size(11, Field11);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static SpeedMessage2GroupedMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SpeedMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SpeedMessage2GroupedMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(SpeedMessage2GroupedMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage2GroupedMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SpeedMessage2GroupedMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SpeedMessage2GroupedMessage result;
-
-      private SpeedMessage2GroupedMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SpeedMessage2GroupedMessage original = result;
-          result = new SpeedMessage2GroupedMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SpeedMessage2GroupedMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Descriptor; }
-      }
-
-      public override SpeedMessage2GroupedMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance; }
-      }
-
-      public override SpeedMessage2GroupedMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is SpeedMessage2GroupedMessage) {
-          return MergeFrom((SpeedMessage2GroupedMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(SpeedMessage2GroupedMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasField1) {
-          Field1 = other.Field1;
-        }
-        if (other.HasField2) {
-          Field2 = other.Field2;
-        }
-        if (other.HasField3) {
-          Field3 = other.Field3;
-        }
-        if (other.HasField4) {
-          Field4 = other.Field4;
-        }
-        if (other.HasField5) {
-          Field5 = other.Field5;
-        }
-        if (other.HasField6) {
-          Field6 = other.Field6;
-        }
-        if (other.HasField7) {
-          Field7 = other.Field7;
-        }
-        if (other.HasField8) {
-          Field8 = other.Field8;
-        }
-        if (other.HasField9) {
-          Field9 = other.Field9;
-        }
-        if (other.HasField10) {
-          Field10 = other.Field10;
-        }
-        if (other.HasField11) {
-          Field11 = other.Field11;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_speedMessage2GroupedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _speedMessage2GroupedMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 13: {
-              result.hasField1 = input.ReadFloat(ref result.field1_);
-              break;
-            }
-            case 21: {
-              result.hasField2 = input.ReadFloat(ref result.field2_);
-              break;
-            }
-            case 29: {
-              result.hasField3 = input.ReadFloat(ref result.field3_);
-              break;
-            }
-            case 32: {
-              result.hasField4 = input.ReadBool(ref result.field4_);
-              break;
-            }
-            case 40: {
-              result.hasField5 = input.ReadBool(ref result.field5_);
-              break;
-            }
-            case 48: {
-              result.hasField6 = input.ReadBool(ref result.field6_);
-              break;
-            }
-            case 56: {
-              result.hasField7 = input.ReadBool(ref result.field7_);
-              break;
-            }
-            case 69: {
-              result.hasField8 = input.ReadFloat(ref result.field8_);
-              break;
-            }
-            case 72: {
-              result.hasField9 = input.ReadBool(ref result.field9_);
-              break;
-            }
-            case 85: {
-              result.hasField10 = input.ReadFloat(ref result.field10_);
-              break;
-            }
-            case 88: {
-              result.hasField11 = input.ReadInt64(ref result.field11_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public float Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(float value) {
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = 0F;
-        return this;
-      }
-
-      public bool HasField2 {
-        get { return result.hasField2; }
-      }
-      public float Field2 {
-        get { return result.Field2; }
-        set { SetField2(value); }
-      }
-      public Builder SetField2(float value) {
-        PrepareBuilder();
-        result.hasField2 = true;
-        result.field2_ = value;
-        return this;
-      }
-      public Builder ClearField2() {
-        PrepareBuilder();
-        result.hasField2 = false;
-        result.field2_ = 0F;
-        return this;
-      }
-
-      public bool HasField3 {
-        get { return result.hasField3; }
-      }
-      public float Field3 {
-        get { return result.Field3; }
-        set { SetField3(value); }
-      }
-      public Builder SetField3(float value) {
-        PrepareBuilder();
-        result.hasField3 = true;
-        result.field3_ = value;
-        return this;
-      }
-      public Builder ClearField3() {
-        PrepareBuilder();
-        result.hasField3 = false;
-        result.field3_ = 0F;
-        return this;
-      }
-
-      public bool HasField4 {
-        get { return result.hasField4; }
-      }
-      public bool Field4 {
-        get { return result.Field4; }
-        set { SetField4(value); }
-      }
-      public Builder SetField4(bool value) {
-        PrepareBuilder();
-        result.hasField4 = true;
-        result.field4_ = value;
-        return this;
-      }
-      public Builder ClearField4() {
-        PrepareBuilder();
-        result.hasField4 = false;
-        result.field4_ = false;
-        return this;
-      }
-
-      public bool HasField5 {
-        get { return result.hasField5; }
-      }
-      public bool Field5 {
-        get { return result.Field5; }
-        set { SetField5(value); }
-      }
-      public Builder SetField5(bool value) {
-        PrepareBuilder();
-        result.hasField5 = true;
-        result.field5_ = value;
-        return this;
-      }
-      public Builder ClearField5() {
-        PrepareBuilder();
-        result.hasField5 = false;
-        result.field5_ = false;
-        return this;
-      }
-
-      public bool HasField6 {
-        get { return result.hasField6; }
-      }
-      public bool Field6 {
-        get { return result.Field6; }
-        set { SetField6(value); }
-      }
-      public Builder SetField6(bool value) {
-        PrepareBuilder();
-        result.hasField6 = true;
-        result.field6_ = value;
-        return this;
-      }
-      public Builder ClearField6() {
-        PrepareBuilder();
-        result.hasField6 = false;
-        result.field6_ = true;
-        return this;
-      }
-
-      public bool HasField7 {
-        get { return result.hasField7; }
-      }
-      public bool Field7 {
-        get { return result.Field7; }
-        set { SetField7(value); }
-      }
-      public Builder SetField7(bool value) {
-        PrepareBuilder();
-        result.hasField7 = true;
-        result.field7_ = value;
-        return this;
-      }
-      public Builder ClearField7() {
-        PrepareBuilder();
-        result.hasField7 = false;
-        result.field7_ = false;
-        return this;
-      }
-
-      public bool HasField8 {
-        get { return result.hasField8; }
-      }
-      public float Field8 {
-        get { return result.Field8; }
-        set { SetField8(value); }
-      }
-      public Builder SetField8(float value) {
-        PrepareBuilder();
-        result.hasField8 = true;
-        result.field8_ = value;
-        return this;
-      }
-      public Builder ClearField8() {
-        PrepareBuilder();
-        result.hasField8 = false;
-        result.field8_ = 0F;
-        return this;
-      }
-
-      public bool HasField9 {
-        get { return result.hasField9; }
-      }
-      public bool Field9 {
-        get { return result.Field9; }
-        set { SetField9(value); }
-      }
-      public Builder SetField9(bool value) {
-        PrepareBuilder();
-        result.hasField9 = true;
-        result.field9_ = value;
-        return this;
-      }
-      public Builder ClearField9() {
-        PrepareBuilder();
-        result.hasField9 = false;
-        result.field9_ = false;
-        return this;
-      }
-
-      public bool HasField10 {
-        get { return result.hasField10; }
-      }
-      public float Field10 {
-        get { return result.Field10; }
-        set { SetField10(value); }
-      }
-      public Builder SetField10(float value) {
-        PrepareBuilder();
-        result.hasField10 = true;
-        result.field10_ = value;
-        return this;
-      }
-      public Builder ClearField10() {
-        PrepareBuilder();
-        result.hasField10 = false;
-        result.field10_ = 0F;
-        return this;
-      }
-
-      public bool HasField11 {
-        get { return result.hasField11; }
-      }
-      public long Field11 {
-        get { return result.Field11; }
-        set { SetField11(value); }
-      }
-      public Builder SetField11(long value) {
-        PrepareBuilder();
-        result.hasField11 = true;
-        result.field11_ = value;
-        return this;
-      }
-      public Builder ClearField11() {
-        PrepareBuilder();
-        result.hasField11 = false;
-        result.field11_ = 0L;
-        return this;
-      }
-    }
-    static SpeedMessage2GroupedMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.GoogleSpeed.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 0 - 33878
csharp/src/ProtocolBuffers.Test/TestProtos/Unittest.cs

@@ -1,33878 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unittest.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class Unittest {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalInt32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalInt64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalUint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalUint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalSint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalSint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalFixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalFixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalSfixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalSfixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalFloatExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalDoubleExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalBoolExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalStringExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalBytesExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalGroupExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalNestedMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalForeignMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalImportMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalNestedEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalForeignEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalImportEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalStringPieceExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalCordExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalPublicImportMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalLazyMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedInt32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedInt64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedUint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedUint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedSint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedSint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedFixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedFixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedSfixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedSfixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedFloatExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedDoubleExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedBoolExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedStringExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedBytesExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedGroupExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedNestedMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedForeignMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedImportMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedNestedEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedForeignEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedImportEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedStringPieceExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedCordExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedLazyMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultInt32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultInt64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultUint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultUint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultSint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultSint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultFixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultFixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultSfixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultSfixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultFloatExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultDoubleExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultBoolExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultStringExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultBytesExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultNestedEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultForeignEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultImportEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultStringPieceExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultCordExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OneofUint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OneofNestedMessageExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OneofStringExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.OneofBytesExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.MyExtensionString);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.MyExtensionInt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedInt32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedInt64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedUint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedUint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedSint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedSint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedFixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedFixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedSfixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedSfixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedFloatExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedDoubleExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedBoolExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.PackedEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedInt32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedInt64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedUint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedUint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedSint32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedSint64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedFixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedFixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedSfixed32Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedSfixed64Extension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedFloatExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedDoubleExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedBoolExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedEnumExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Test);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.NestedStringExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestRequired.Single);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestRequired.Multi);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.OptionalExt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.RepeatedExt);
-    }
-    #endregion
-    #region Extensions
-    public const int OptionalInt32ExtensionFieldNumber = 1;
-    public static pb::GeneratedExtensionBase<int> OptionalInt32Extension;
-    public const int OptionalInt64ExtensionFieldNumber = 2;
-    public static pb::GeneratedExtensionBase<long> OptionalInt64Extension;
-    public const int OptionalUint32ExtensionFieldNumber = 3;
-    public static pb::GeneratedExtensionBase<uint> OptionalUint32Extension;
-    public const int OptionalUint64ExtensionFieldNumber = 4;
-    public static pb::GeneratedExtensionBase<ulong> OptionalUint64Extension;
-    public const int OptionalSint32ExtensionFieldNumber = 5;
-    public static pb::GeneratedExtensionBase<int> OptionalSint32Extension;
-    public const int OptionalSint64ExtensionFieldNumber = 6;
-    public static pb::GeneratedExtensionBase<long> OptionalSint64Extension;
-    public const int OptionalFixed32ExtensionFieldNumber = 7;
-    public static pb::GeneratedExtensionBase<uint> OptionalFixed32Extension;
-    public const int OptionalFixed64ExtensionFieldNumber = 8;
-    public static pb::GeneratedExtensionBase<ulong> OptionalFixed64Extension;
-    public const int OptionalSfixed32ExtensionFieldNumber = 9;
-    public static pb::GeneratedExtensionBase<int> OptionalSfixed32Extension;
-    public const int OptionalSfixed64ExtensionFieldNumber = 10;
-    public static pb::GeneratedExtensionBase<long> OptionalSfixed64Extension;
-    public const int OptionalFloatExtensionFieldNumber = 11;
-    public static pb::GeneratedExtensionBase<float> OptionalFloatExtension;
-    public const int OptionalDoubleExtensionFieldNumber = 12;
-    public static pb::GeneratedExtensionBase<double> OptionalDoubleExtension;
-    public const int OptionalBoolExtensionFieldNumber = 13;
-    public static pb::GeneratedExtensionBase<bool> OptionalBoolExtension;
-    public const int OptionalStringExtensionFieldNumber = 14;
-    public static pb::GeneratedExtensionBase<string> OptionalStringExtension;
-    public const int OptionalBytesExtensionFieldNumber = 15;
-    public static pb::GeneratedExtensionBase<pb::ByteString> OptionalBytesExtension;
-    public const int OptionalGroupExtensionFieldNumber = 16;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension> OptionalGroupExtension;
-    public const int OptionalNestedMessageExtensionFieldNumber = 18;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> OptionalNestedMessageExtension;
-    public const int OptionalForeignMessageExtensionFieldNumber = 19;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> OptionalForeignMessageExtension;
-    public const int OptionalImportMessageExtensionFieldNumber = 20;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportMessage> OptionalImportMessageExtension;
-    public const int OptionalNestedEnumExtensionFieldNumber = 21;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> OptionalNestedEnumExtension;
-    public const int OptionalForeignEnumExtensionFieldNumber = 22;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> OptionalForeignEnumExtension;
-    public const int OptionalImportEnumExtensionFieldNumber = 23;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnum> OptionalImportEnumExtension;
-    public const int OptionalStringPieceExtensionFieldNumber = 24;
-    public static pb::GeneratedExtensionBase<string> OptionalStringPieceExtension;
-    public const int OptionalCordExtensionFieldNumber = 25;
-    public static pb::GeneratedExtensionBase<string> OptionalCordExtension;
-    public const int OptionalPublicImportMessageExtensionFieldNumber = 26;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.PublicImportMessage> OptionalPublicImportMessageExtension;
-    public const int OptionalLazyMessageExtensionFieldNumber = 27;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> OptionalLazyMessageExtension;
-    public const int RepeatedInt32ExtensionFieldNumber = 31;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedInt32Extension;
-    public const int RepeatedInt64ExtensionFieldNumber = 32;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedInt64Extension;
-    public const int RepeatedUint32ExtensionFieldNumber = 33;
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedUint32Extension;
-    public const int RepeatedUint64ExtensionFieldNumber = 34;
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedUint64Extension;
-    public const int RepeatedSint32ExtensionFieldNumber = 35;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSint32Extension;
-    public const int RepeatedSint64ExtensionFieldNumber = 36;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSint64Extension;
-    public const int RepeatedFixed32ExtensionFieldNumber = 37;
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedFixed32Extension;
-    public const int RepeatedFixed64ExtensionFieldNumber = 38;
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedFixed64Extension;
-    public const int RepeatedSfixed32ExtensionFieldNumber = 39;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSfixed32Extension;
-    public const int RepeatedSfixed64ExtensionFieldNumber = 40;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSfixed64Extension;
-    public const int RepeatedFloatExtensionFieldNumber = 41;
-    public static pb::GeneratedExtensionBase<scg::IList<float>> RepeatedFloatExtension;
-    public const int RepeatedDoubleExtensionFieldNumber = 42;
-    public static pb::GeneratedExtensionBase<scg::IList<double>> RepeatedDoubleExtension;
-    public const int RepeatedBoolExtensionFieldNumber = 43;
-    public static pb::GeneratedExtensionBase<scg::IList<bool>> RepeatedBoolExtension;
-    public const int RepeatedStringExtensionFieldNumber = 44;
-    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringExtension;
-    public const int RepeatedBytesExtensionFieldNumber = 45;
-    public static pb::GeneratedExtensionBase<scg::IList<pb::ByteString>> RepeatedBytesExtension;
-    public const int RepeatedGroupExtensionFieldNumber = 46;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension>> RepeatedGroupExtension;
-    public const int RepeatedNestedMessageExtensionFieldNumber = 48;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>> RepeatedNestedMessageExtension;
-    public const int RepeatedForeignMessageExtensionFieldNumber = 49;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>> RepeatedForeignMessageExtension;
-    public const int RepeatedImportMessageExtensionFieldNumber = 50;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessage>> RepeatedImportMessageExtension;
-    public const int RepeatedNestedEnumExtensionFieldNumber = 51;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>> RepeatedNestedEnumExtension;
-    public const int RepeatedForeignEnumExtensionFieldNumber = 52;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> RepeatedForeignEnumExtension;
-    public const int RepeatedImportEnumExtensionFieldNumber = 53;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnum>> RepeatedImportEnumExtension;
-    public const int RepeatedStringPieceExtensionFieldNumber = 54;
-    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringPieceExtension;
-    public const int RepeatedCordExtensionFieldNumber = 55;
-    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedCordExtension;
-    public const int RepeatedLazyMessageExtensionFieldNumber = 57;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>> RepeatedLazyMessageExtension;
-    public const int DefaultInt32ExtensionFieldNumber = 61;
-    public static pb::GeneratedExtensionBase<int> DefaultInt32Extension;
-    public const int DefaultInt64ExtensionFieldNumber = 62;
-    public static pb::GeneratedExtensionBase<long> DefaultInt64Extension;
-    public const int DefaultUint32ExtensionFieldNumber = 63;
-    public static pb::GeneratedExtensionBase<uint> DefaultUint32Extension;
-    public const int DefaultUint64ExtensionFieldNumber = 64;
-    public static pb::GeneratedExtensionBase<ulong> DefaultUint64Extension;
-    public const int DefaultSint32ExtensionFieldNumber = 65;
-    public static pb::GeneratedExtensionBase<int> DefaultSint32Extension;
-    public const int DefaultSint64ExtensionFieldNumber = 66;
-    public static pb::GeneratedExtensionBase<long> DefaultSint64Extension;
-    public const int DefaultFixed32ExtensionFieldNumber = 67;
-    public static pb::GeneratedExtensionBase<uint> DefaultFixed32Extension;
-    public const int DefaultFixed64ExtensionFieldNumber = 68;
-    public static pb::GeneratedExtensionBase<ulong> DefaultFixed64Extension;
-    public const int DefaultSfixed32ExtensionFieldNumber = 69;
-    public static pb::GeneratedExtensionBase<int> DefaultSfixed32Extension;
-    public const int DefaultSfixed64ExtensionFieldNumber = 70;
-    public static pb::GeneratedExtensionBase<long> DefaultSfixed64Extension;
-    public const int DefaultFloatExtensionFieldNumber = 71;
-    public static pb::GeneratedExtensionBase<float> DefaultFloatExtension;
-    public const int DefaultDoubleExtensionFieldNumber = 72;
-    public static pb::GeneratedExtensionBase<double> DefaultDoubleExtension;
-    public const int DefaultBoolExtensionFieldNumber = 73;
-    public static pb::GeneratedExtensionBase<bool> DefaultBoolExtension;
-    public const int DefaultStringExtensionFieldNumber = 74;
-    public static pb::GeneratedExtensionBase<string> DefaultStringExtension;
-    public const int DefaultBytesExtensionFieldNumber = 75;
-    public static pb::GeneratedExtensionBase<pb::ByteString> DefaultBytesExtension;
-    public const int DefaultNestedEnumExtensionFieldNumber = 81;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> DefaultNestedEnumExtension;
-    public const int DefaultForeignEnumExtensionFieldNumber = 82;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> DefaultForeignEnumExtension;
-    public const int DefaultImportEnumExtensionFieldNumber = 83;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnum> DefaultImportEnumExtension;
-    public const int DefaultStringPieceExtensionFieldNumber = 84;
-    public static pb::GeneratedExtensionBase<string> DefaultStringPieceExtension;
-    public const int DefaultCordExtensionFieldNumber = 85;
-    public static pb::GeneratedExtensionBase<string> DefaultCordExtension;
-    public const int OneofUint32ExtensionFieldNumber = 111;
-    public static pb::GeneratedExtensionBase<uint> OneofUint32Extension;
-    public const int OneofNestedMessageExtensionFieldNumber = 112;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> OneofNestedMessageExtension;
-    public const int OneofStringExtensionFieldNumber = 113;
-    public static pb::GeneratedExtensionBase<string> OneofStringExtension;
-    public const int OneofBytesExtensionFieldNumber = 114;
-    public static pb::GeneratedExtensionBase<pb::ByteString> OneofBytesExtension;
-    public const int MyExtensionStringFieldNumber = 50;
-    public static pb::GeneratedExtensionBase<string> MyExtensionString;
-    public const int MyExtensionIntFieldNumber = 5;
-    public static pb::GeneratedExtensionBase<int> MyExtensionInt;
-    public const int PackedInt32ExtensionFieldNumber = 90;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedInt32Extension;
-    public const int PackedInt64ExtensionFieldNumber = 91;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedInt64Extension;
-    public const int PackedUint32ExtensionFieldNumber = 92;
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedUint32Extension;
-    public const int PackedUint64ExtensionFieldNumber = 93;
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedUint64Extension;
-    public const int PackedSint32ExtensionFieldNumber = 94;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSint32Extension;
-    public const int PackedSint64ExtensionFieldNumber = 95;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSint64Extension;
-    public const int PackedFixed32ExtensionFieldNumber = 96;
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedFixed32Extension;
-    public const int PackedFixed64ExtensionFieldNumber = 97;
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedFixed64Extension;
-    public const int PackedSfixed32ExtensionFieldNumber = 98;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSfixed32Extension;
-    public const int PackedSfixed64ExtensionFieldNumber = 99;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSfixed64Extension;
-    public const int PackedFloatExtensionFieldNumber = 100;
-    public static pb::GeneratedExtensionBase<scg::IList<float>> PackedFloatExtension;
-    public const int PackedDoubleExtensionFieldNumber = 101;
-    public static pb::GeneratedExtensionBase<scg::IList<double>> PackedDoubleExtension;
-    public const int PackedBoolExtensionFieldNumber = 102;
-    public static pb::GeneratedExtensionBase<scg::IList<bool>> PackedBoolExtension;
-    public const int PackedEnumExtensionFieldNumber = 103;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> PackedEnumExtension;
-    public const int UnpackedInt32ExtensionFieldNumber = 90;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> UnpackedInt32Extension;
-    public const int UnpackedInt64ExtensionFieldNumber = 91;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> UnpackedInt64Extension;
-    public const int UnpackedUint32ExtensionFieldNumber = 92;
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> UnpackedUint32Extension;
-    public const int UnpackedUint64ExtensionFieldNumber = 93;
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> UnpackedUint64Extension;
-    public const int UnpackedSint32ExtensionFieldNumber = 94;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> UnpackedSint32Extension;
-    public const int UnpackedSint64ExtensionFieldNumber = 95;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> UnpackedSint64Extension;
-    public const int UnpackedFixed32ExtensionFieldNumber = 96;
-    public static pb::GeneratedExtensionBase<scg::IList<uint>> UnpackedFixed32Extension;
-    public const int UnpackedFixed64ExtensionFieldNumber = 97;
-    public static pb::GeneratedExtensionBase<scg::IList<ulong>> UnpackedFixed64Extension;
-    public const int UnpackedSfixed32ExtensionFieldNumber = 98;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> UnpackedSfixed32Extension;
-    public const int UnpackedSfixed64ExtensionFieldNumber = 99;
-    public static pb::GeneratedExtensionBase<scg::IList<long>> UnpackedSfixed64Extension;
-    public const int UnpackedFloatExtensionFieldNumber = 100;
-    public static pb::GeneratedExtensionBase<scg::IList<float>> UnpackedFloatExtension;
-    public const int UnpackedDoubleExtensionFieldNumber = 101;
-    public static pb::GeneratedExtensionBase<scg::IList<double>> UnpackedDoubleExtension;
-    public const int UnpackedBoolExtensionFieldNumber = 102;
-    public static pb::GeneratedExtensionBase<scg::IList<bool>> UnpackedBoolExtension;
-    public const int UnpackedEnumExtensionFieldNumber = 103;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> UnpackedEnumExtension;
-    #endregion
-
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder> internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder> internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder> internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes, global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.Builder> internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Builder> internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ForeignMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder> internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReservedFields__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReservedFields, global::Google.ProtocolBuffers.TestProtos.TestReservedFields.Builder> internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllExtensions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensions, global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Builder> internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Builder> internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Builder> internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedExtension__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtension, global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Builder> internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequired__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequired, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder> internal__static_protobuf_unittest_TestRequired__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequiredForeign__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign, global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Builder> internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestForeignNested__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestForeignNested, global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Builder> internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmptyMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Builder> internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Builder> internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges, global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Builder> internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber, global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Builder> internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage, global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder> internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder> internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder> internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Builder> internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder> internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder> internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEagerMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEagerMessage, global::Google.ProtocolBuffers.TestProtos.TestEagerMessage.Builder> internal__static_protobuf_unittest_TestEagerMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestLazyMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestLazyMessage, global::Google.ProtocolBuffers.TestProtos.TestLazyMessage.Builder> internal__static_protobuf_unittest_TestLazyMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Builder> internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames, global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Builder> internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Builder> internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues, global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Builder> internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SparseEnumMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage, global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Builder> internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneString__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneString, global::Google.ProtocolBuffers.TestProtos.OneString.Builder> internal__static_protobuf_unittest_OneString__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_MoreString__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.MoreString, global::Google.ProtocolBuffers.TestProtos.MoreString.Builder> internal__static_protobuf_unittest_MoreString__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneBytes__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneBytes, global::Google.ProtocolBuffers.TestProtos.OneBytes.Builder> internal__static_protobuf_unittest_OneBytes__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_MoreBytes__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.MoreBytes, global::Google.ProtocolBuffers.TestProtos.MoreBytes.Builder> internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Int32Message__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Int32Message, global::Google.ProtocolBuffers.TestProtos.Int32Message.Builder> internal__static_protobuf_unittest_Int32Message__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Uint32Message__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Uint32Message, global::Google.ProtocolBuffers.TestProtos.Uint32Message.Builder> internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Int64Message__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Int64Message, global::Google.ProtocolBuffers.TestProtos.Int64Message.Builder> internal__static_protobuf_unittest_Int64Message__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Uint64Message__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Uint64Message, global::Google.ProtocolBuffers.TestProtos.Uint64Message.Builder> internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BoolMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BoolMessage, global::Google.ProtocolBuffers.TestProtos.BoolMessage.Builder> internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneof__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof, global::Google.ProtocolBuffers.TestProtos.TestOneof.Builder> internal__static_protobuf_unittest_TestOneof__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneof_FooGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup, global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.Builder> internal__static_protobuf_unittest_TestOneof_FooGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneofBackwardsCompatible__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible, global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Builder> internal__static_protobuf_unittest_TestOneofBackwardsCompatible__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneofBackwardsCompatible_FooGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup, global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.Builder> internal__static_protobuf_unittest_TestOneofBackwardsCompatible_FooGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneof2__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof2, global::Google.ProtocolBuffers.TestProtos.TestOneof2.Builder> internal__static_protobuf_unittest_TestOneof2__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneof2_FooGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup, global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.Builder> internal__static_protobuf_unittest_TestOneof2_FooGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneof2_NestedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestOneof2_NestedMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequiredOneof__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof, global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Builder> internal__static_protobuf_unittest_TestRequiredOneof__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequiredOneof_NestedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestRequiredOneof_NestedMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedTypes__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypes, global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Builder> internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes, global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Builder> internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedExtensions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Builder> internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestUnpackedExtensions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.Builder> internal__static_protobuf_unittest_TestUnpackedExtensions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Builder> internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder> internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes, global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Builder> internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestParsingMerge__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Builder> internal__static_protobuf_unittest_TestParsingMerge__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Builder> internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group1__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1.Builder> internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group1__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group2__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2.Builder> internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group2__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestParsingMerge_OptionalGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.Builder> internal__static_protobuf_unittest_TestParsingMerge_OptionalGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestParsingMerge_RepeatedGroup__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup.Builder> internal__static_protobuf_unittest_TestParsingMerge_RepeatedGroup__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCommentInjectionMessage, global::Google.ProtocolBuffers.TestProtos.TestCommentInjectionMessage.Builder> internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooRequest__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooRequest, global::Google.ProtocolBuffers.TestProtos.FooRequest.Builder> internal__static_protobuf_unittest_FooRequest__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooResponse__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder> internal__static_protobuf_unittest_FooResponse__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooClientMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooClientMessage, global::Google.ProtocolBuffers.TestProtos.FooClientMessage.Builder> internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooServerMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooServerMessage, global::Google.ProtocolBuffers.TestProtos.FooServerMessage.Builder> internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarRequest__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarRequest, global::Google.ProtocolBuffers.TestProtos.BarRequest.Builder> internal__static_protobuf_unittest_BarRequest__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarResponse__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder> internal__static_protobuf_unittest_BarResponse__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static Unittest() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "Ch5nb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8SEXByb3RvYnVmX3Vu", 
-            "aXR0ZXN0GiVnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3Rv", 
-            "Iu0YCgxUZXN0QWxsVHlwZXMSFgoOb3B0aW9uYWxfaW50MzIYASABKAUSFgoO", 
-            "b3B0aW9uYWxfaW50NjQYAiABKAMSFwoPb3B0aW9uYWxfdWludDMyGAMgASgN", 
-            "EhcKD29wdGlvbmFsX3VpbnQ2NBgEIAEoBBIXCg9vcHRpb25hbF9zaW50MzIY", 
-            "BSABKBESFwoPb3B0aW9uYWxfc2ludDY0GAYgASgSEhgKEG9wdGlvbmFsX2Zp", 
-            "eGVkMzIYByABKAcSGAoQb3B0aW9uYWxfZml4ZWQ2NBgIIAEoBhIZChFvcHRp", 
-            "b25hbF9zZml4ZWQzMhgJIAEoDxIZChFvcHRpb25hbF9zZml4ZWQ2NBgKIAEo", 
-            "EBIWCg5vcHRpb25hbF9mbG9hdBgLIAEoAhIXCg9vcHRpb25hbF9kb3VibGUY", 
-            "DCABKAESFQoNb3B0aW9uYWxfYm9vbBgNIAEoCBIXCg9vcHRpb25hbF9zdHJp", 
-            "bmcYDiABKAkSFgoOb3B0aW9uYWxfYnl0ZXMYDyABKAwSRAoNb3B0aW9uYWxn", 
-            "cm91cBgQIAEoCjItLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5P", 
-            "cHRpb25hbEdyb3VwEk4KF29wdGlvbmFsX25lc3RlZF9tZXNzYWdlGBIgASgL", 
-            "Mi0ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3Nh", 
-            "Z2USQwoYb3B0aW9uYWxfZm9yZWlnbl9tZXNzYWdlGBMgASgLMiEucHJvdG9i", 
-            "dWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USSAoXb3B0aW9uYWxfaW1wb3J0", 
-            "X21lc3NhZ2UYFCABKAsyJy5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1w", 
-            "b3J0TWVzc2FnZRJIChRvcHRpb25hbF9uZXN0ZWRfZW51bRgVIAEoDjIqLnBy", 
-            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtEj0KFW9w", 
-            "dGlvbmFsX2ZvcmVpZ25fZW51bRgWIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0", 
-            "LkZvcmVpZ25FbnVtEkIKFG9wdGlvbmFsX2ltcG9ydF9lbnVtGBcgASgOMiQu", 
-            "cHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW0SIQoVb3B0aW9u", 
-            "YWxfc3RyaW5nX3BpZWNlGBggASgJQgIIAhIZCg1vcHRpb25hbF9jb3JkGBkg", 
-            "ASgJQgIIARJVCh5vcHRpb25hbF9wdWJsaWNfaW1wb3J0X21lc3NhZ2UYGiAB", 
-            "KAsyLS5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuUHVibGljSW1wb3J0TWVz", 
-            "c2FnZRJQChVvcHRpb25hbF9sYXp5X21lc3NhZ2UYGyABKAsyLS5wcm90b2J1", 
-            "Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZUICKAESFgoO", 
-            "cmVwZWF0ZWRfaW50MzIYHyADKAUSFgoOcmVwZWF0ZWRfaW50NjQYICADKAMS", 
-            "FwoPcmVwZWF0ZWRfdWludDMyGCEgAygNEhcKD3JlcGVhdGVkX3VpbnQ2NBgi", 
-            "IAMoBBIXCg9yZXBlYXRlZF9zaW50MzIYIyADKBESFwoPcmVwZWF0ZWRfc2lu", 
-            "dDY0GCQgAygSEhgKEHJlcGVhdGVkX2ZpeGVkMzIYJSADKAcSGAoQcmVwZWF0", 
-            "ZWRfZml4ZWQ2NBgmIAMoBhIZChFyZXBlYXRlZF9zZml4ZWQzMhgnIAMoDxIZ", 
-            "ChFyZXBlYXRlZF9zZml4ZWQ2NBgoIAMoEBIWCg5yZXBlYXRlZF9mbG9hdBgp", 
-            "IAMoAhIXCg9yZXBlYXRlZF9kb3VibGUYKiADKAESFQoNcmVwZWF0ZWRfYm9v", 
-            "bBgrIAMoCBIXCg9yZXBlYXRlZF9zdHJpbmcYLCADKAkSFgoOcmVwZWF0ZWRf", 
-            "Ynl0ZXMYLSADKAwSRAoNcmVwZWF0ZWRncm91cBguIAMoCjItLnByb3RvYnVm", 
-            "X3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5SZXBlYXRlZEdyb3VwEk4KF3JlcGVh", 
-            "dGVkX25lc3RlZF9tZXNzYWdlGDAgAygLMi0ucHJvdG9idWZfdW5pdHRlc3Qu", 
-            "VGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2USQwoYcmVwZWF0ZWRfZm9yZWln", 
-            "bl9tZXNzYWdlGDEgAygLMiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1l", 
-            "c3NhZ2USSAoXcmVwZWF0ZWRfaW1wb3J0X21lc3NhZ2UYMiADKAsyJy5wcm90", 
-            "b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0TWVzc2FnZRJIChRyZXBlYXRl", 
-            "ZF9uZXN0ZWRfZW51bRgzIAMoDjIqLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 
-            "bGxUeXBlcy5OZXN0ZWRFbnVtEj0KFXJlcGVhdGVkX2ZvcmVpZ25fZW51bRg0", 
-            "IAMoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtEkIKFHJlcGVh", 
-            "dGVkX2ltcG9ydF9lbnVtGDUgAygOMiQucHJvdG9idWZfdW5pdHRlc3RfaW1w", 
-            "b3J0LkltcG9ydEVudW0SIQoVcmVwZWF0ZWRfc3RyaW5nX3BpZWNlGDYgAygJ", 
-            "QgIIAhIZCg1yZXBlYXRlZF9jb3JkGDcgAygJQgIIARJQChVyZXBlYXRlZF9s", 
-            "YXp5X21lc3NhZ2UYOSADKAsyLS5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs", 
-            "VHlwZXMuTmVzdGVkTWVzc2FnZUICKAESGQoNZGVmYXVsdF9pbnQzMhg9IAEo", 
-            "BToCNDESGQoNZGVmYXVsdF9pbnQ2NBg+IAEoAzoCNDISGgoOZGVmYXVsdF91", 
-            "aW50MzIYPyABKA06AjQzEhoKDmRlZmF1bHRfdWludDY0GEAgASgEOgI0NBIb", 
-            "Cg5kZWZhdWx0X3NpbnQzMhhBIAEoEToDLTQ1EhoKDmRlZmF1bHRfc2ludDY0", 
-            "GEIgASgSOgI0NhIbCg9kZWZhdWx0X2ZpeGVkMzIYQyABKAc6AjQ3EhsKD2Rl", 
-            "ZmF1bHRfZml4ZWQ2NBhEIAEoBjoCNDgSHAoQZGVmYXVsdF9zZml4ZWQzMhhF", 
-            "IAEoDzoCNDkSHQoQZGVmYXVsdF9zZml4ZWQ2NBhGIAEoEDoDLTUwEhsKDWRl", 
-            "ZmF1bHRfZmxvYXQYRyABKAI6BDUxLjUSHQoOZGVmYXVsdF9kb3VibGUYSCAB", 
-            "KAE6BTUyMDAwEhoKDGRlZmF1bHRfYm9vbBhJIAEoCDoEdHJ1ZRIdCg5kZWZh", 
-            "dWx0X3N0cmluZxhKIAEoCToFaGVsbG8SHAoNZGVmYXVsdF9ieXRlcxhLIAEo", 
-            "DDoFd29ybGQSTAoTZGVmYXVsdF9uZXN0ZWRfZW51bRhRIAEoDjIqLnByb3Rv", 
-            "YnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtOgNCQVISSQoU", 
-            "ZGVmYXVsdF9mb3JlaWduX2VudW0YUiABKA4yHi5wcm90b2J1Zl91bml0dGVz", 
-            "dC5Gb3JlaWduRW51bToLRk9SRUlHTl9CQVISTQoTZGVmYXVsdF9pbXBvcnRf", 
-            "ZW51bRhTIAEoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRF", 
-            "bnVtOgpJTVBPUlRfQkFSEiUKFGRlZmF1bHRfc3RyaW5nX3BpZWNlGFQgASgJ", 
-            "OgNhYmNCAggCEh0KDGRlZmF1bHRfY29yZBhVIAEoCToDMTIzQgIIARIWCgxv", 
-            "bmVvZl91aW50MzIYbyABKA1IABJNChRvbmVvZl9uZXN0ZWRfbWVzc2FnZRhw", 
-            "IAEoCzItLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRN", 
-            "ZXNzYWdlSAASFgoMb25lb2Zfc3RyaW5nGHEgASgJSAASFQoLb25lb2ZfYnl0", 
-            "ZXMYciABKAxIABobCg1OZXN0ZWRNZXNzYWdlEgoKAmJiGAEgASgFGhoKDU9w", 
-            "dGlvbmFsR3JvdXASCQoBYRgRIAEoBRoaCg1SZXBlYXRlZEdyb3VwEgkKAWEY", 
-            "LyABKAUiOQoKTmVzdGVkRW51bRIHCgNGT08QARIHCgNCQVIQAhIHCgNCQVoQ", 
-            "AxIQCgNORUcQ////////////AUINCgtvbmVvZl9maWVsZCK7AQoSTmVzdGVk", 
-            "VGVzdEFsbFR5cGVzEjQKBWNoaWxkGAEgASgLMiUucHJvdG9idWZfdW5pdHRl", 
-            "c3QuTmVzdGVkVGVzdEFsbFR5cGVzEjAKB3BheWxvYWQYAiABKAsyHy5wcm90", 
-            "b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMSPQoOcmVwZWF0ZWRfY2hpbGQY", 
-            "AyADKAsyJS5wcm90b2J1Zl91bml0dGVzdC5OZXN0ZWRUZXN0QWxsVHlwZXMi", 
-            "NAoUVGVzdERlcHJlY2F0ZWRGaWVsZHMSHAoQZGVwcmVjYXRlZF9pbnQzMhgB", 
-            "IAEoBUICGAEiGwoORm9yZWlnbk1lc3NhZ2USCQoBYxgBIAEoBSIwChJUZXN0", 
-            "UmVzZXJ2ZWRGaWVsZHNKBAgCEANKBAgPEBBKBAgJEAxSA2JhclIDYmF6Ih0K", 
-            "EVRlc3RBbGxFeHRlbnNpb25zKggIARCAgICAAiIkChdPcHRpb25hbEdyb3Vw", 
-            "X2V4dGVuc2lvbhIJCgFhGBEgASgFIiQKF1JlcGVhdGVkR3JvdXBfZXh0ZW5z", 
-            "aW9uEgkKAWEYLyABKAUimAEKE1Rlc3ROZXN0ZWRFeHRlbnNpb24yOQoEdGVz", 
-            "dBIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGOoHIAEo", 
-            "CToEdGVzdDJGChduZXN0ZWRfc3RyaW5nX2V4dGVuc2lvbhIkLnByb3RvYnVm", 
-            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGOsHIAEoCSLVBQoMVGVzdFJl", 
-            "cXVpcmVkEgkKAWEYASACKAUSDgoGZHVtbXkyGAIgASgFEgkKAWIYAyACKAUS", 
-            "DgoGZHVtbXk0GAQgASgFEg4KBmR1bW15NRgFIAEoBRIOCgZkdW1teTYYBiAB", 
-            "KAUSDgoGZHVtbXk3GAcgASgFEg4KBmR1bW15OBgIIAEoBRIOCgZkdW1teTkY", 
-            "CSABKAUSDwoHZHVtbXkxMBgKIAEoBRIPCgdkdW1teTExGAsgASgFEg8KB2R1", 
-            "bW15MTIYDCABKAUSDwoHZHVtbXkxMxgNIAEoBRIPCgdkdW1teTE0GA4gASgF", 
-            "Eg8KB2R1bW15MTUYDyABKAUSDwoHZHVtbXkxNhgQIAEoBRIPCgdkdW1teTE3", 
-            "GBEgASgFEg8KB2R1bW15MTgYEiABKAUSDwoHZHVtbXkxORgTIAEoBRIPCgdk", 
-            "dW1teTIwGBQgASgFEg8KB2R1bW15MjEYFSABKAUSDwoHZHVtbXkyMhgWIAEo", 
-            "BRIPCgdkdW1teTIzGBcgASgFEg8KB2R1bW15MjQYGCABKAUSDwoHZHVtbXky", 
-            "NRgZIAEoBRIPCgdkdW1teTI2GBogASgFEg8KB2R1bW15MjcYGyABKAUSDwoH", 
-            "ZHVtbXkyOBgcIAEoBRIPCgdkdW1teTI5GB0gASgFEg8KB2R1bW15MzAYHiAB", 
-            "KAUSDwoHZHVtbXkzMRgfIAEoBRIPCgdkdW1teTMyGCAgASgFEgkKAWMYISAC", 
-            "KAUyVgoGc2luZ2xlEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVu", 
-            "c2lvbnMY6AcgASgLMh8ucHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVk", 
-            "MlUKBW11bHRpEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv", 
-            "bnMY6QcgAygLMh8ucHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlcXVpcmVkIpoB", 
-            "ChNUZXN0UmVxdWlyZWRGb3JlaWduEjkKEG9wdGlvbmFsX21lc3NhZ2UYASAB", 
-            "KAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWQSOQoQcmVwZWF0", 
-            "ZWRfbWVzc2FnZRgCIAMoCzIfLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RSZXF1", 
-            "aXJlZBINCgVkdW1teRgDIAEoBSJaChFUZXN0Rm9yZWlnbk5lc3RlZBJFCg5m", 
-            "b3JlaWduX25lc3RlZBgBIAEoCzItLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 
-            "bGxUeXBlcy5OZXN0ZWRNZXNzYWdlIhIKEFRlc3RFbXB0eU1lc3NhZ2UiKgoe", 
-            "VGVzdEVtcHR5TWVzc2FnZVdpdGhFeHRlbnNpb25zKggIARCAgICAAiI3ChtU", 
-            "ZXN0TXVsdGlwbGVFeHRlbnNpb25SYW5nZXMqBAgqECsqBgivIBCUISoKCICA", 
-            "BBCAgICAAiI0ChhUZXN0UmVhbGx5TGFyZ2VUYWdOdW1iZXISCQoBYRgBIAEo", 
-            "BRINCgJiYhj///9/IAEoBSJVChRUZXN0UmVjdXJzaXZlTWVzc2FnZRIyCgFh", 
-            "GAEgASgLMicucHJvdG9idWZfdW5pdHRlc3QuVGVzdFJlY3Vyc2l2ZU1lc3Nh", 
-            "Z2USCQoBaRgCIAEoBSJLChRUZXN0TXV0dWFsUmVjdXJzaW9uQRIzCgJiYhgB", 
-            "IAEoCzInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNdXR1YWxSZWN1cnNpb25C", 
-            "ImIKFFRlc3RNdXR1YWxSZWN1cnNpb25CEjIKAWEYASABKAsyJy5wcm90b2J1", 
-            "Zl91bml0dGVzdC5UZXN0TXV0dWFsUmVjdXJzaW9uQRIWCg5vcHRpb25hbF9p", 
-            "bnQzMhgCIAEoBSKzAQoSVGVzdER1cEZpZWxkTnVtYmVyEgkKAWEYASABKAUS", 
-            "NgoDZm9vGAIgASgKMikucHJvdG9idWZfdW5pdHRlc3QuVGVzdER1cEZpZWxk", 
-            "TnVtYmVyLkZvbxI2CgNiYXIYAyABKAoyKS5wcm90b2J1Zl91bml0dGVzdC5U", 
-            "ZXN0RHVwRmllbGROdW1iZXIuQmFyGhAKA0ZvbxIJCgFhGAEgASgFGhAKA0Jh", 
-            "chIJCgFhGAEgASgFIkwKEFRlc3RFYWdlck1lc3NhZ2USOAoLc3ViX21lc3Nh", 
-            "Z2UYASABKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXNCAigA", 
-            "IksKD1Rlc3RMYXp5TWVzc2FnZRI4CgtzdWJfbWVzc2FnZRgBIAEoCzIfLnBy", 
-            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlc0ICKAEigAIKGFRlc3ROZXN0", 
-            "ZWRNZXNzYWdlSGFzQml0cxJaChdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZRgB", 
-            "IAEoCzI5LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3ROZXN0ZWRNZXNzYWdlSGFz", 
-            "Qml0cy5OZXN0ZWRNZXNzYWdlGocBCg1OZXN0ZWRNZXNzYWdlEiQKHG5lc3Rl", 
-            "ZG1lc3NhZ2VfcmVwZWF0ZWRfaW50MzIYASADKAUSUAolbmVzdGVkbWVzc2Fn", 
-            "ZV9yZXBlYXRlZF9mb3JlaWdubWVzc2FnZRgCIAMoCzIhLnByb3RvYnVmX3Vu", 
-            "aXR0ZXN0LkZvcmVpZ25NZXNzYWdlIuUDChdUZXN0Q2FtZWxDYXNlRmllbGRO", 
-            "YW1lcxIWCg5QcmltaXRpdmVGaWVsZBgBIAEoBRITCgtTdHJpbmdGaWVsZBgC", 
-            "IAEoCRIxCglFbnVtRmllbGQYAyABKA4yHi5wcm90b2J1Zl91bml0dGVzdC5G", 
-            "b3JlaWduRW51bRI3CgxNZXNzYWdlRmllbGQYBCABKAsyIS5wcm90b2J1Zl91", 
-            "bml0dGVzdC5Gb3JlaWduTWVzc2FnZRIcChBTdHJpbmdQaWVjZUZpZWxkGAUg", 
-            "ASgJQgIIAhIVCglDb3JkRmllbGQYBiABKAlCAggBEh4KFlJlcGVhdGVkUHJp", 
-            "bWl0aXZlRmllbGQYByADKAUSGwoTUmVwZWF0ZWRTdHJpbmdGaWVsZBgIIAMo", 
-            "CRI5ChFSZXBlYXRlZEVudW1GaWVsZBgJIAMoDjIeLnByb3RvYnVmX3VuaXR0", 
-            "ZXN0LkZvcmVpZ25FbnVtEj8KFFJlcGVhdGVkTWVzc2FnZUZpZWxkGAogAygL", 
-            "MiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USJAoYUmVwZWF0", 
-            "ZWRTdHJpbmdQaWVjZUZpZWxkGAsgAygJQgIIAhIdChFSZXBlYXRlZENvcmRG", 
-            "aWVsZBgMIAMoCUICCAEi1QEKElRlc3RGaWVsZE9yZGVyaW5ncxIRCglteV9z", 
-            "dHJpbmcYCyABKAkSDgoGbXlfaW50GAEgASgDEhAKCG15X2Zsb2F0GGUgASgC", 
-            "ElUKF29wdGlvbmFsX25lc3RlZF9tZXNzYWdlGMgBIAEoCzIzLnByb3RvYnVm", 
-            "X3VuaXR0ZXN0LlRlc3RGaWVsZE9yZGVyaW5ncy5OZXN0ZWRNZXNzYWdlGicK", 
-            "DU5lc3RlZE1lc3NhZ2USCgoCb28YAiABKAMSCgoCYmIYASABKAUqBAgCEAsq", 
-            "BAgMEGUitgcKGFRlc3RFeHRyZW1lRGVmYXVsdFZhbHVlcxI/Cg1lc2NhcGVk", 
-            "X2J5dGVzGAEgASgMOihcMDAwXDAwMVwwMDdcMDEwXDAxNFxuXHJcdFwwMTNc", 
-            "XFwnXCJcMzc2EiAKDGxhcmdlX3VpbnQzMhgCIAEoDToKNDI5NDk2NzI5NRIq", 
-            "CgxsYXJnZV91aW50NjQYAyABKAQ6FDE4NDQ2NzQ0MDczNzA5NTUxNjE1EiAK", 
-            "C3NtYWxsX2ludDMyGAQgASgFOgstMjE0NzQ4MzY0NxIpCgtzbWFsbF9pbnQ2", 
-            "NBgFIAEoAzoULTkyMjMzNzIwMzY4NTQ3NzU4MDcSJwoScmVhbGx5X3NtYWxs", 
-            "X2ludDMyGBUgASgFOgstMjE0NzQ4MzY0OBIwChJyZWFsbHlfc21hbGxfaW50", 
-            "NjQYFiABKAM6FC05MjIzMzcyMDM2ODU0Nzc1ODA4EhgKC3V0Zjhfc3RyaW5n", 
-            "GAYgASgJOgPhiLQSFQoKemVyb19mbG9hdBgHIAEoAjoBMBIUCglvbmVfZmxv", 
-            "YXQYCCABKAI6ATESGAoLc21hbGxfZmxvYXQYCSABKAI6AzEuNRIeChJuZWdh", 
-            "dGl2ZV9vbmVfZmxvYXQYCiABKAI6Ai0xEhwKDm5lZ2F0aXZlX2Zsb2F0GAsg", 
-            "ASgCOgQtMS41EhoKC2xhcmdlX2Zsb2F0GAwgASgCOgUyZSswOBIkChRzbWFs", 
-            "bF9uZWdhdGl2ZV9mbG9hdBgNIAEoAjoGLThlLTI4EhcKCmluZl9kb3VibGUY", 
-            "DiABKAE6A2luZhIcCg5uZWdfaW5mX2RvdWJsZRgPIAEoAToELWluZhIXCgpu", 
-            "YW5fZG91YmxlGBAgASgBOgNuYW4SFgoJaW5mX2Zsb2F0GBEgASgCOgNpbmYS", 
-            "GwoNbmVnX2luZl9mbG9hdBgSIAEoAjoELWluZhIWCgluYW5fZmxvYXQYEyAB", 
-            "KAI6A25hbhIrCgxjcHBfdHJpZ3JhcGgYFCABKAk6FT8gPyA/PyA/PyA/Pz8g", 
-            "Pz8vID8/LRIgChBzdHJpbmdfd2l0aF96ZXJvGBcgASgJOgZoZWwAbG8SIgoP", 
-            "Ynl0ZXNfd2l0aF96ZXJvGBggASgMOgl3b3JcMDAwbGQSKAoWc3RyaW5nX3Bp", 
-            "ZWNlX3dpdGhfemVybxgZIAEoCToEYWIAY0ICCAISIAoOY29yZF93aXRoX3pl", 
-            "cm8YGiABKAk6BDEyADNCAggBEiYKEnJlcGxhY2VtZW50X3N0cmluZxgbIAEo", 
-            "CToKJHt1bmtub3dufSJLChFTcGFyc2VFbnVtTWVzc2FnZRI2CgtzcGFyc2Vf", 
-            "ZW51bRgBIAEoDjIhLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RTcGFyc2VFbnVt", 
-            "IhkKCU9uZVN0cmluZxIMCgRkYXRhGAEgASgJIhoKCk1vcmVTdHJpbmcSDAoE", 
-            "ZGF0YRgBIAMoCSIYCghPbmVCeXRlcxIMCgRkYXRhGAEgASgMIhkKCU1vcmVC", 
-            "eXRlcxIMCgRkYXRhGAEgAygMIhwKDEludDMyTWVzc2FnZRIMCgRkYXRhGAEg", 
-            "ASgFIh0KDVVpbnQzMk1lc3NhZ2USDAoEZGF0YRgBIAEoDSIcCgxJbnQ2NE1l", 
-            "c3NhZ2USDAoEZGF0YRgBIAEoAyIdCg1VaW50NjRNZXNzYWdlEgwKBGRhdGEY", 
-            "ASABKAQiGwoLQm9vbE1lc3NhZ2USDAoEZGF0YRgBIAEoCCLQAQoJVGVzdE9u", 
-            "ZW9mEhEKB2Zvb19pbnQYASABKAVIABIUCgpmb29fc3RyaW5nGAIgASgJSAAS", 
-            "NgoLZm9vX21lc3NhZ2UYAyABKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 
-            "QWxsVHlwZXNIABI5Cghmb29ncm91cBgEIAEoCjIlLnByb3RvYnVmX3VuaXR0", 
-            "ZXN0LlRlc3RPbmVvZi5Gb29Hcm91cEgAGiAKCEZvb0dyb3VwEgkKAWEYBSAB", 
-            "KAUSCQoBYhgGIAEoCUIFCgNmb28i5wEKHFRlc3RPbmVvZkJhY2t3YXJkc0Nv", 
-            "bXBhdGlibGUSDwoHZm9vX2ludBgBIAEoBRISCgpmb29fc3RyaW5nGAIgASgJ", 
-            "EjQKC2Zvb19tZXNzYWdlGAMgASgLMh8ucHJvdG9idWZfdW5pdHRlc3QuVGVz", 
-            "dEFsbFR5cGVzEkoKCGZvb2dyb3VwGAQgASgKMjgucHJvdG9idWZfdW5pdHRl", 
-            "c3QuVGVzdE9uZW9mQmFja3dhcmRzQ29tcGF0aWJsZS5Gb29Hcm91cBogCghG", 
-            "b29Hcm91cBIJCgFhGAUgASgFEgkKAWIYBiABKAkingYKClRlc3RPbmVvZjIS", 
-            "EQoHZm9vX2ludBgBIAEoBUgAEhQKCmZvb19zdHJpbmcYAiABKAlIABIWCghm", 
-            "b29fY29yZBgDIAEoCUICCAFIABIeChBmb29fc3RyaW5nX3BpZWNlGAQgASgJ", 
-            "QgIIAkgAEhMKCWZvb19ieXRlcxgFIAEoDEgAEjwKCGZvb19lbnVtGAYgASgO", 
-            "MigucHJvdG9idWZfdW5pdHRlc3QuVGVzdE9uZW9mMi5OZXN0ZWRFbnVtSAAS", 
-            "QgoLZm9vX21lc3NhZ2UYByABKAsyKy5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 
-            "T25lb2YyLk5lc3RlZE1lc3NhZ2VIABI6Cghmb29ncm91cBgIIAEoCjImLnBy", 
-            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RPbmVvZjIuRm9vR3JvdXBIABJLChBmb29f", 
-            "bGF6eV9tZXNzYWdlGAsgASgLMisucHJvdG9idWZfdW5pdHRlc3QuVGVzdE9u", 
-            "ZW9mMi5OZXN0ZWRNZXNzYWdlQgIoAUgAEhQKB2Jhcl9pbnQYDCABKAU6ATVI", 
-            "ARIcCgpiYXJfc3RyaW5nGA0gASgJOgZTVFJJTkdIARIcCghiYXJfY29yZBgO", 
-            "IAEoCToEQ09SREICCAFIARImChBiYXJfc3RyaW5nX3BpZWNlGA8gASgJOgZT", 
-            "UElFQ0VCAggCSAESGgoJYmFyX2J5dGVzGBAgASgMOgVCWVRFU0gBEkEKCGJh", 
-            "cl9lbnVtGBEgASgOMigucHJvdG9idWZfdW5pdHRlc3QuVGVzdE9uZW9mMi5O", 
-            "ZXN0ZWRFbnVtOgNCQVJIARIPCgdiYXpfaW50GBIgASgFEhcKCmJhel9zdHJp", 
-            "bmcYEyABKAk6A0JBWhogCghGb29Hcm91cBIJCgFhGAkgASgFEgkKAWIYCiAB", 
-            "KAkaMwoNTmVzdGVkTWVzc2FnZRIPCgdxdXhfaW50GAEgASgDEhEKCWNvcmdl", 
-            "X2ludBgCIAMoBSInCgpOZXN0ZWRFbnVtEgcKA0ZPTxABEgcKA0JBUhACEgcK", 
-            "A0JBWhADQgUKA2Zvb0IFCgNiYXIiuAEKEVRlc3RSZXF1aXJlZE9uZW9mEhEK", 
-            "B2Zvb19pbnQYASABKAVIABIUCgpmb29fc3RyaW5nGAIgASgJSAASSQoLZm9v", 
-            "X21lc3NhZ2UYAyABKAsyMi5wcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWly", 
-            "ZWRPbmVvZi5OZXN0ZWRNZXNzYWdlSAAaKAoNTmVzdGVkTWVzc2FnZRIXCg9y", 
-            "ZXF1aXJlZF9kb3VibGUYASACKAFCBQoDZm9vIqoDCg9UZXN0UGFja2VkVHlw", 
-            "ZXMSGAoMcGFja2VkX2ludDMyGFogAygFQgIQARIYCgxwYWNrZWRfaW50NjQY", 
-            "WyADKANCAhABEhkKDXBhY2tlZF91aW50MzIYXCADKA1CAhABEhkKDXBhY2tl", 
-            "ZF91aW50NjQYXSADKARCAhABEhkKDXBhY2tlZF9zaW50MzIYXiADKBFCAhAB", 
-            "EhkKDXBhY2tlZF9zaW50NjQYXyADKBJCAhABEhoKDnBhY2tlZF9maXhlZDMy", 
-            "GGAgAygHQgIQARIaCg5wYWNrZWRfZml4ZWQ2NBhhIAMoBkICEAESGwoPcGFj", 
-            "a2VkX3NmaXhlZDMyGGIgAygPQgIQARIbCg9wYWNrZWRfc2ZpeGVkNjQYYyAD", 
-            "KBBCAhABEhgKDHBhY2tlZF9mbG9hdBhkIAMoAkICEAESGQoNcGFja2VkX2Rv", 
-            "dWJsZRhlIAMoAUICEAESFwoLcGFja2VkX2Jvb2wYZiADKAhCAhABEjcKC3Bh", 
-            "Y2tlZF9lbnVtGGcgAygOMh4ucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbkVu", 
-            "dW1CAhABIsgDChFUZXN0VW5wYWNrZWRUeXBlcxIaCg51bnBhY2tlZF9pbnQz", 
-            "MhhaIAMoBUICEAASGgoOdW5wYWNrZWRfaW50NjQYWyADKANCAhAAEhsKD3Vu", 
-            "cGFja2VkX3VpbnQzMhhcIAMoDUICEAASGwoPdW5wYWNrZWRfdWludDY0GF0g", 
-            "AygEQgIQABIbCg91bnBhY2tlZF9zaW50MzIYXiADKBFCAhAAEhsKD3VucGFj", 
-            "a2VkX3NpbnQ2NBhfIAMoEkICEAASHAoQdW5wYWNrZWRfZml4ZWQzMhhgIAMo", 
-            "B0ICEAASHAoQdW5wYWNrZWRfZml4ZWQ2NBhhIAMoBkICEAASHQoRdW5wYWNr", 
-            "ZWRfc2ZpeGVkMzIYYiADKA9CAhAAEh0KEXVucGFja2VkX3NmaXhlZDY0GGMg", 
-            "AygQQgIQABIaCg51bnBhY2tlZF9mbG9hdBhkIAMoAkICEAASGwoPdW5wYWNr", 
-            "ZWRfZG91YmxlGGUgAygBQgIQABIZCg11bnBhY2tlZF9ib29sGGYgAygIQgIQ", 
-            "ABI5Cg11bnBhY2tlZF9lbnVtGGcgAygOMh4ucHJvdG9idWZfdW5pdHRlc3Qu", 
-            "Rm9yZWlnbkVudW1CAhAAIiAKFFRlc3RQYWNrZWRFeHRlbnNpb25zKggIARCA", 
-            "gICAAiIiChZUZXN0VW5wYWNrZWRFeHRlbnNpb25zKggIARCAgICAAiKZBAoV", 
-            "VGVzdER5bmFtaWNFeHRlbnNpb25zEhkKEHNjYWxhcl9leHRlbnNpb24Y0A8g", 
-            "ASgHEjcKDmVudW1fZXh0ZW5zaW9uGNEPIAEoDjIeLnByb3RvYnVmX3VuaXR0", 
-            "ZXN0LkZvcmVpZ25FbnVtElkKFmR5bmFtaWNfZW51bV9leHRlbnNpb24Y0g8g", 
-            "ASgOMjgucHJvdG9idWZfdW5pdHRlc3QuVGVzdER5bmFtaWNFeHRlbnNpb25z", 
-            "LkR5bmFtaWNFbnVtVHlwZRI9ChFtZXNzYWdlX2V4dGVuc2lvbhjTDyABKAsy", 
-            "IS5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduTWVzc2FnZRJfChlkeW5hbWlj", 
-            "X21lc3NhZ2VfZXh0ZW5zaW9uGNQPIAEoCzI7LnByb3RvYnVmX3VuaXR0ZXN0", 
-            "LlRlc3REeW5hbWljRXh0ZW5zaW9ucy5EeW5hbWljTWVzc2FnZVR5cGUSGwoS", 
-            "cmVwZWF0ZWRfZXh0ZW5zaW9uGNUPIAMoCRIdChBwYWNrZWRfZXh0ZW5zaW9u", 
-            "GNYPIAMoEUICEAEaLAoSRHluYW1pY01lc3NhZ2VUeXBlEhYKDWR5bmFtaWNf", 
-            "ZmllbGQYtBAgASgFIkcKD0R5bmFtaWNFbnVtVHlwZRIQCgtEWU5BTUlDX0ZP", 
-            "TxCYERIQCgtEWU5BTUlDX0JBUhCZERIQCgtEWU5BTUlDX0JBWhCaESLAAQoj", 
-            "VGVzdFJlcGVhdGVkU2NhbGFyRGlmZmVyZW50VGFnU2l6ZXMSGAoQcmVwZWF0", 
-            "ZWRfZml4ZWQzMhgMIAMoBxIWCg5yZXBlYXRlZF9pbnQzMhgNIAMoBRIZChBy", 
-            "ZXBlYXRlZF9maXhlZDY0GP4PIAMoBhIXCg5yZXBlYXRlZF9pbnQ2NBj/DyAD", 
-            "KAMSGAoOcmVwZWF0ZWRfZmxvYXQY/v8PIAMoAhIZCg9yZXBlYXRlZF91aW50", 
-            "NjQY//8PIAMoBCL3CQoQVGVzdFBhcnNpbmdNZXJnZRI7ChJyZXF1aXJlZF9h", 
-            "bGxfdHlwZXMYASACKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlw", 
-            "ZXMSOwoSb3B0aW9uYWxfYWxsX3R5cGVzGAIgASgLMh8ucHJvdG9idWZfdW5p", 
-            "dHRlc3QuVGVzdEFsbFR5cGVzEjsKEnJlcGVhdGVkX2FsbF90eXBlcxgDIAMo", 
-            "CzIfLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcxJICg1vcHRpb25h", 
-            "bGdyb3VwGAogASgKMjEucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhcnNpbmdN", 
-            "ZXJnZS5PcHRpb25hbEdyb3VwEkgKDXJlcGVhdGVkZ3JvdXAYFCADKAoyMS5w", 
-            "cm90b2J1Zl91bml0dGVzdC5UZXN0UGFyc2luZ01lcmdlLlJlcGVhdGVkR3Jv", 
-            "dXAaqgQKF1JlcGVhdGVkRmllbGRzR2VuZXJhdG9yEi8KBmZpZWxkMRgBIAMo", 
-            "CzIfLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcxIvCgZmaWVsZDIY", 
-            "AiADKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMSLwoGZmll", 
-            "bGQzGAMgAygLMh8ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzElIK", 
-            "Bmdyb3VwMRgKIAMoCjJCLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYXJzaW5n", 
-            "TWVyZ2UuUmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAxElIKBmdyb3Vw", 
-            "MhgUIAMoCjJCLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYXJzaW5nTWVyZ2Uu", 
-            "UmVwZWF0ZWRGaWVsZHNHZW5lcmF0b3IuR3JvdXAyEi4KBGV4dDEY6AcgAygL", 
-            "Mh8ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzEi4KBGV4dDIY6Qcg", 
-            "AygLMh8ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzGjkKBkdyb3Vw", 
-            "MRIvCgZmaWVsZDEYCyABKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs", 
-            "VHlwZXMaOQoGR3JvdXAyEi8KBmZpZWxkMRgVIAEoCzIfLnByb3RvYnVmX3Vu", 
-            "aXR0ZXN0LlRlc3RBbGxUeXBlcxpSCg1PcHRpb25hbEdyb3VwEkEKGG9wdGlv", 
-            "bmFsX2dyb3VwX2FsbF90eXBlcxgLIAEoCzIfLnByb3RvYnVmX3VuaXR0ZXN0", 
-            "LlRlc3RBbGxUeXBlcxpSCg1SZXBlYXRlZEdyb3VwEkEKGHJlcGVhdGVkX2dy", 
-            "b3VwX2FsbF90eXBlcxgVIAEoCzIfLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 
-            "bGxUeXBlcyoJCOgHEICAgIACMlsKDG9wdGlvbmFsX2V4dBIjLnByb3RvYnVm", 
-            "X3VuaXR0ZXN0LlRlc3RQYXJzaW5nTWVyZ2UY6AcgASgLMh8ucHJvdG9idWZf", 
-            "dW5pdHRlc3QuVGVzdEFsbFR5cGVzMlsKDHJlcGVhdGVkX2V4dBIjLnByb3Rv", 
-            "YnVmX3VuaXR0ZXN0LlRlc3RQYXJzaW5nTWVyZ2UY6QcgAygLMh8ucHJvdG9i", 
-            "dWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzIkQKG1Rlc3RDb21tZW50SW5qZWN0", 
-            "aW9uTWVzc2FnZRIlCgFhGAEgASgJOhoqLyA8LSBOZWl0aGVyIHNob3VsZCB0", 
-            "aGlzLiIMCgpGb29SZXF1ZXN0Ig0KC0Zvb1Jlc3BvbnNlIhIKEEZvb0NsaWVu", 
-            "dE1lc3NhZ2UiEgoQRm9vU2VydmVyTWVzc2FnZSIMCgpCYXJSZXF1ZXN0Ig0K", 
-            "C0JhclJlc3BvbnNlKkAKC0ZvcmVpZ25FbnVtEg8KC0ZPUkVJR05fRk9PEAQS", 
-            "DwoLRk9SRUlHTl9CQVIQBRIPCgtGT1JFSUdOX0JBWhAGKksKFFRlc3RFbnVt", 
-            "V2l0aER1cFZhbHVlEggKBEZPTzEQARIICgRCQVIxEAISBwoDQkFaEAMSCAoE", 
-            "Rk9PMhABEggKBEJBUjIQAhoCEAEqiQEKDlRlc3RTcGFyc2VFbnVtEgwKCFNQ", 
-            "QVJTRV9BEHsSDgoIU1BBUlNFX0IQpucDEg8KCFNQQVJTRV9DELKxgAYSFQoI", 
-            "U1BBUlNFX0QQ8f//////////ARIVCghTUEFSU0VfRRC03vz///////8BEgwK", 
-            "CFNQQVJTRV9GEAASDAoIU1BBUlNFX0cQAjKZAQoLVGVzdFNlcnZpY2USRAoD", 
-            "Rm9vEh0ucHJvdG9idWZfdW5pdHRlc3QuRm9vUmVxdWVzdBoeLnByb3RvYnVm", 
-            "X3VuaXR0ZXN0LkZvb1Jlc3BvbnNlEkQKA0JhchIdLnByb3RvYnVmX3VuaXR0", 
-            "ZXN0LkJhclJlcXVlc3QaHi5wcm90b2J1Zl91bml0dGVzdC5CYXJSZXNwb25z", 
-            "ZTpGChhvcHRpb25hbF9pbnQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0", 
-            "dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgBIAEoBTpGChhvcHRpb25hbF9pbnQ2", 
-            "NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 
-            "aW9ucxgCIAEoAzpHChlvcHRpb25hbF91aW50MzJfZXh0ZW5zaW9uEiQucHJv", 
-            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYAyABKA06RwoZb3B0", 
-            "aW9uYWxfdWludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 
-            "c3RBbGxFeHRlbnNpb25zGAQgASgEOkcKGW9wdGlvbmFsX3NpbnQzMl9leHRl", 
-            "bnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgF", 
-            "IAEoETpHChlvcHRpb25hbF9zaW50NjRfZXh0ZW5zaW9uEiQucHJvdG9idWZf", 
-            "dW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYBiABKBI6SAoab3B0aW9uYWxf", 
-            "Zml4ZWQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs", 
-            "RXh0ZW5zaW9ucxgHIAEoBzpIChpvcHRpb25hbF9maXhlZDY0X2V4dGVuc2lv", 
-            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGAggASgG", 
-            "OkkKG29wdGlvbmFsX3NmaXhlZDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3Vu", 
-            "aXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGAkgASgPOkkKG29wdGlvbmFsX3Nm", 
-            "aXhlZDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 
-            "eHRlbnNpb25zGAogASgQOkYKGG9wdGlvbmFsX2Zsb2F0X2V4dGVuc2lvbhIk", 
-            "LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGAsgASgCOkcK", 
-            "GW9wdGlvbmFsX2RvdWJsZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVz", 
-            "dC5UZXN0QWxsRXh0ZW5zaW9ucxgMIAEoATpFChdvcHRpb25hbF9ib29sX2V4", 
-            "dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25z", 
-            "GA0gASgIOkcKGW9wdGlvbmFsX3N0cmluZ19leHRlbnNpb24SJC5wcm90b2J1", 
-            "Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgOIAEoCTpGChhvcHRpb25h", 
-            "bF9ieXRlc19leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs", 
-            "RXh0ZW5zaW9ucxgPIAEoDDpxChdvcHRpb25hbGdyb3VwX2V4dGVuc2lvbhIk", 
-            "LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGBAgASgKMiou", 
-            "cHJvdG9idWZfdW5pdHRlc3QuT3B0aW9uYWxHcm91cF9leHRlbnNpb246fgoh", 
-            "b3B0aW9uYWxfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9idWZf", 
-            "dW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYEiABKAsyLS5wcm90b2J1Zl91", 
-            "bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZTpzCiJvcHRpb25h", 
-            "bF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRl", 
-            "c3QuVGVzdEFsbEV4dGVuc2lvbnMYEyABKAsyIS5wcm90b2J1Zl91bml0dGVz", 
-            "dC5Gb3JlaWduTWVzc2FnZTp4CiFvcHRpb25hbF9pbXBvcnRfbWVzc2FnZV9l", 
-            "eHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u", 
-            "cxgUIAEoCzInLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNz", 
-            "YWdlOngKHm9wdGlvbmFsX25lc3RlZF9lbnVtX2V4dGVuc2lvbhIkLnByb3Rv", 
-            "YnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGBUgASgOMioucHJvdG9i", 
-            "dWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW06bQofb3B0aW9u", 
-            "YWxfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0", 
-            "LlRlc3RBbGxFeHRlbnNpb25zGBYgASgOMh4ucHJvdG9idWZfdW5pdHRlc3Qu", 
-            "Rm9yZWlnbkVudW06cgoeb3B0aW9uYWxfaW1wb3J0X2VudW1fZXh0ZW5zaW9u", 
-            "EiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYFyABKA4y", 
-            "JC5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bTpRCh9vcHRp", 
-            "b25hbF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRl", 
-            "c3QuVGVzdEFsbEV4dGVuc2lvbnMYGCABKAlCAggCOkkKF29wdGlvbmFsX2Nv", 
-            "cmRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVu", 
-            "c2lvbnMYGSABKAlCAggBOoUBCihvcHRpb25hbF9wdWJsaWNfaW1wb3J0X21l", 
-            "c3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 
-            "dGVuc2lvbnMYGiABKAsyLS5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuUHVi", 
-            "bGljSW1wb3J0TWVzc2FnZTqAAQofb3B0aW9uYWxfbGF6eV9tZXNzYWdlX2V4", 
-            "dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25z", 
-            "GBsgASgLMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3Rl", 
-            "ZE1lc3NhZ2VCAigBOkYKGHJlcGVhdGVkX2ludDMyX2V4dGVuc2lvbhIkLnBy", 
-            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGB8gAygFOkYKGHJl", 
-            "cGVhdGVkX2ludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 
-            "c3RBbGxFeHRlbnNpb25zGCAgAygDOkcKGXJlcGVhdGVkX3VpbnQzMl9leHRl", 
-            "bnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgh", 
-            "IAMoDTpHChlyZXBlYXRlZF91aW50NjRfZXh0ZW5zaW9uEiQucHJvdG9idWZf", 
-            "dW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYIiADKAQ6RwoZcmVwZWF0ZWRf", 
-            "c2ludDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 
-            "eHRlbnNpb25zGCMgAygROkcKGXJlcGVhdGVkX3NpbnQ2NF9leHRlbnNpb24S", 
-            "JC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgkIAMoEjpI", 
-            "ChpyZXBlYXRlZF9maXhlZDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 
-            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCUgAygHOkgKGnJlcGVhdGVkX2ZpeGVk", 
-            "NjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVu", 
-            "c2lvbnMYJiADKAY6SQobcmVwZWF0ZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uEiQu", 
-            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYJyADKA86SQob", 
-            "cmVwZWF0ZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRl", 
-            "c3QuVGVzdEFsbEV4dGVuc2lvbnMYKCADKBA6RgoYcmVwZWF0ZWRfZmxvYXRf", 
-            "ZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv", 
-            "bnMYKSADKAI6RwoZcmVwZWF0ZWRfZG91YmxlX2V4dGVuc2lvbhIkLnByb3Rv", 
-            "YnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCogAygBOkUKF3JlcGVh", 
-            "dGVkX2Jvb2xfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs", 
-            "bEV4dGVuc2lvbnMYKyADKAg6RwoZcmVwZWF0ZWRfc3RyaW5nX2V4dGVuc2lv", 
-            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCwgAygJ", 
-            "OkYKGHJlcGVhdGVkX2J5dGVzX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 
-            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGC0gAygMOnEKF3JlcGVhdGVkZ3JvdXBf", 
-            "ZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv", 
-            "bnMYLiADKAoyKi5wcm90b2J1Zl91bml0dGVzdC5SZXBlYXRlZEdyb3VwX2V4", 
-            "dGVuc2lvbjp+CiFyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24S", 
-            "JC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgwIAMoCzIt", 
-            "LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdl", 
-            "OnMKInJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZV9leHRlbnNpb24SJC5wcm90", 
-            "b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgxIAMoCzIhLnByb3Rv", 
-            "YnVmX3VuaXR0ZXN0LkZvcmVpZ25NZXNzYWdlOngKIXJlcGVhdGVkX2ltcG9y", 
-            "dF9tZXNzYWdlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 
-            "bGxFeHRlbnNpb25zGDIgAygLMicucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0", 
-            "LkltcG9ydE1lc3NhZ2U6eAoecmVwZWF0ZWRfbmVzdGVkX2VudW1fZXh0ZW5z", 
-            "aW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYMyAD", 
-            "KA4yKi5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkRW51", 
-            "bTptCh9yZXBlYXRlZF9mb3JlaWduX2VudW1fZXh0ZW5zaW9uEiQucHJvdG9i", 
-            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYNCADKA4yHi5wcm90b2J1", 
-            "Zl91bml0dGVzdC5Gb3JlaWduRW51bTpyCh5yZXBlYXRlZF9pbXBvcnRfZW51", 
-            "bV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 
-            "aW9ucxg1IAMoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRF", 
-            "bnVtOlEKH3JlcGVhdGVkX3N0cmluZ19waWVjZV9leHRlbnNpb24SJC5wcm90", 
-            "b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxg2IAMoCUICCAI6SQoX", 
-            "cmVwZWF0ZWRfY29yZF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5U", 
-            "ZXN0QWxsRXh0ZW5zaW9ucxg3IAMoCUICCAE6gAEKH3JlcGVhdGVkX2xhenlf", 
-            "bWVzc2FnZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxs", 
-            "RXh0ZW5zaW9ucxg5IAMoCzItLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxU", 
-            "eXBlcy5OZXN0ZWRNZXNzYWdlQgIoATpJChdkZWZhdWx0X2ludDMyX2V4dGVu", 
-            "c2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGD0g", 
-            "ASgFOgI0MTpJChdkZWZhdWx0X2ludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVm", 
-            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGD4gASgDOgI0MjpKChhkZWZh", 
-            "dWx0X3VpbnQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 
-            "QWxsRXh0ZW5zaW9ucxg/IAEoDToCNDM6SgoYZGVmYXVsdF91aW50NjRfZXh0", 
-            "ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY", 
-            "QCABKAQ6AjQ0OksKGGRlZmF1bHRfc2ludDMyX2V4dGVuc2lvbhIkLnByb3Rv", 
-            "YnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEEgASgROgMtNDU6SgoY", 
-            "ZGVmYXVsdF9zaW50NjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3Qu", 
-            "VGVzdEFsbEV4dGVuc2lvbnMYQiABKBI6AjQ2OksKGWRlZmF1bHRfZml4ZWQz", 
-            "Ml9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 
-            "aW9ucxhDIAEoBzoCNDc6SwoZZGVmYXVsdF9maXhlZDY0X2V4dGVuc2lvbhIk", 
-            "LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEQgASgGOgI0", 
-            "ODpMChpkZWZhdWx0X3NmaXhlZDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3Vu", 
-            "aXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEUgASgPOgI0OTpNChpkZWZhdWx0", 
-            "X3NmaXhlZDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 
-            "bGxFeHRlbnNpb25zGEYgASgQOgMtNTA6SwoXZGVmYXVsdF9mbG9hdF9leHRl", 
-            "bnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhH", 
-            "IAEoAjoENTEuNTpNChhkZWZhdWx0X2RvdWJsZV9leHRlbnNpb24SJC5wcm90", 
-            "b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhIIAEoAToFNTIwMDA6", 
-            "SgoWZGVmYXVsdF9ib29sX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0", 
-            "LlRlc3RBbGxFeHRlbnNpb25zGEkgASgIOgR0cnVlOk0KGGRlZmF1bHRfc3Ry", 
-            "aW5nX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRl", 
-            "bnNpb25zGEogASgJOgVoZWxsbzpMChdkZWZhdWx0X2J5dGVzX2V4dGVuc2lv", 
-            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEsgASgM", 
-            "OgV3b3JsZDp8Ch1kZWZhdWx0X25lc3RlZF9lbnVtX2V4dGVuc2lvbhIkLnBy", 
-            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGFEgASgOMioucHJv", 
-            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW06A0JBUjp5", 
-            "Ch5kZWZhdWx0X2ZvcmVpZ25fZW51bV9leHRlbnNpb24SJC5wcm90b2J1Zl91", 
-            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhSIAEoDjIeLnByb3RvYnVmX3Vu", 
-            "aXR0ZXN0LkZvcmVpZ25FbnVtOgtGT1JFSUdOX0JBUjp9Ch1kZWZhdWx0X2lt", 
-            "cG9ydF9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 
-            "bGxFeHRlbnNpb25zGFMgASgOMiQucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0", 
-            "LkltcG9ydEVudW06CklNUE9SVF9CQVI6VQoeZGVmYXVsdF9zdHJpbmdfcGll", 
-            "Y2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVu", 
-            "c2lvbnMYVCABKAk6A2FiY0ICCAI6TQoWZGVmYXVsdF9jb3JkX2V4dGVuc2lv", 
-            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGFUgASgJ", 
-            "OgMxMjNCAggBOkQKFm9uZW9mX3VpbnQzMl9leHRlbnNpb24SJC5wcm90b2J1", 
-            "Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhvIAEoDTp7Ch5vbmVvZl9u", 
-            "ZXN0ZWRfbWVzc2FnZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5U", 
-            "ZXN0QWxsRXh0ZW5zaW9ucxhwIAEoCzItLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 
-            "c3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlOkQKFm9uZW9mX3N0cmluZ19leHRl", 
-            "bnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhx", 
-            "IAEoCTpDChVvbmVvZl9ieXRlc19leHRlbnNpb24SJC5wcm90b2J1Zl91bml0", 
-            "dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhyIAEoDDpCChNteV9leHRlbnNpb25f", 
-            "c3RyaW5nEiUucHJvdG9idWZfdW5pdHRlc3QuVGVzdEZpZWxkT3JkZXJpbmdz", 
-            "GDIgASgJOj8KEG15X2V4dGVuc2lvbl9pbnQSJS5wcm90b2J1Zl91bml0dGVz", 
-            "dC5UZXN0RmllbGRPcmRlcmluZ3MYBSABKAU6SwoWcGFja2VkX2ludDMyX2V4", 
-            "dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNp", 
-            "b25zGFogAygFQgIQATpLChZwYWNrZWRfaW50NjRfZXh0ZW5zaW9uEicucHJv", 
-            "dG9idWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYWyADKANCAhAB", 
-            "OkwKF3BhY2tlZF91aW50MzJfZXh0ZW5zaW9uEicucHJvdG9idWZfdW5pdHRl", 
-            "c3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYXCADKA1CAhABOkwKF3BhY2tlZF91", 
-            "aW50NjRfZXh0ZW5zaW9uEicucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhY2tl", 
-            "ZEV4dGVuc2lvbnMYXSADKARCAhABOkwKF3BhY2tlZF9zaW50MzJfZXh0ZW5z", 
-            "aW9uEicucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMY", 
-            "XiADKBFCAhABOkwKF3BhY2tlZF9zaW50NjRfZXh0ZW5zaW9uEicucHJvdG9i", 
-            "dWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYXyADKBJCAhABOk0K", 
-            "GHBhY2tlZF9maXhlZDMyX2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0", 
-            "LlRlc3RQYWNrZWRFeHRlbnNpb25zGGAgAygHQgIQATpNChhwYWNrZWRfZml4", 
-            "ZWQ2NF9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2Vk", 
-            "RXh0ZW5zaW9ucxhhIAMoBkICEAE6TgoZcGFja2VkX3NmaXhlZDMyX2V4dGVu", 
-            "c2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNpb25z", 
-            "GGIgAygPQgIQATpOChlwYWNrZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uEicucHJv", 
-            "dG9idWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYYyADKBBCAhAB", 
-            "OksKFnBhY2tlZF9mbG9hdF9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVz", 
-            "dC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhkIAMoAkICEAE6TAoXcGFja2VkX2Rv", 
-            "dWJsZV9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2Vk", 
-            "RXh0ZW5zaW9ucxhlIAMoAUICEAE6SgoVcGFja2VkX2Jvb2xfZXh0ZW5zaW9u", 
-            "EicucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYZiAD", 
-            "KAhCAhABOmoKFXBhY2tlZF9lbnVtX2V4dGVuc2lvbhInLnByb3RvYnVmX3Vu", 
-            "aXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNpb25zGGcgAygOMh4ucHJvdG9idWZf", 
-            "dW5pdHRlc3QuRm9yZWlnbkVudW1CAhABOk8KGHVucGFja2VkX2ludDMyX2V4", 
-            "dGVuc2lvbhIpLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RVbnBhY2tlZEV4dGVu", 
-            "c2lvbnMYWiADKAVCAhAAOk8KGHVucGFja2VkX2ludDY0X2V4dGVuc2lvbhIp", 
-            "LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RVbnBhY2tlZEV4dGVuc2lvbnMYWyAD", 
-            "KANCAhAAOlAKGXVucGFja2VkX3VpbnQzMl9leHRlbnNpb24SKS5wcm90b2J1", 
-            "Zl91bml0dGVzdC5UZXN0VW5wYWNrZWRFeHRlbnNpb25zGFwgAygNQgIQADpQ", 
-            "Chl1bnBhY2tlZF91aW50NjRfZXh0ZW5zaW9uEikucHJvdG9idWZfdW5pdHRl", 
-            "c3QuVGVzdFVucGFja2VkRXh0ZW5zaW9ucxhdIAMoBEICEAA6UAoZdW5wYWNr", 
-            "ZWRfc2ludDMyX2V4dGVuc2lvbhIpLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RV", 
-            "bnBhY2tlZEV4dGVuc2lvbnMYXiADKBFCAhAAOlAKGXVucGFja2VkX3NpbnQ2", 
-            "NF9leHRlbnNpb24SKS5wcm90b2J1Zl91bml0dGVzdC5UZXN0VW5wYWNrZWRF", 
-            "eHRlbnNpb25zGF8gAygSQgIQADpRChp1bnBhY2tlZF9maXhlZDMyX2V4dGVu", 
-            "c2lvbhIpLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RVbnBhY2tlZEV4dGVuc2lv", 
-            "bnMYYCADKAdCAhAAOlEKGnVucGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uEiku", 
-            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdFVucGFja2VkRXh0ZW5zaW9ucxhhIAMo", 
-            "BkICEAA6UgobdW5wYWNrZWRfc2ZpeGVkMzJfZXh0ZW5zaW9uEikucHJvdG9i", 
-            "dWZfdW5pdHRlc3QuVGVzdFVucGFja2VkRXh0ZW5zaW9ucxhiIAMoD0ICEAA6", 
-            "UgobdW5wYWNrZWRfc2ZpeGVkNjRfZXh0ZW5zaW9uEikucHJvdG9idWZfdW5p", 
-            "dHRlc3QuVGVzdFVucGFja2VkRXh0ZW5zaW9ucxhjIAMoEEICEAA6TwoYdW5w", 
-            "YWNrZWRfZmxvYXRfZXh0ZW5zaW9uEikucHJvdG9idWZfdW5pdHRlc3QuVGVz", 
-            "dFVucGFja2VkRXh0ZW5zaW9ucxhkIAMoAkICEAA6UAoZdW5wYWNrZWRfZG91", 
-            "YmxlX2V4dGVuc2lvbhIpLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RVbnBhY2tl", 
-            "ZEV4dGVuc2lvbnMYZSADKAFCAhAAOk4KF3VucGFja2VkX2Jvb2xfZXh0ZW5z", 
-            "aW9uEikucHJvdG9idWZfdW5pdHRlc3QuVGVzdFVucGFja2VkRXh0ZW5zaW9u", 
-            "cxhmIAMoCEICEAA6bgoXdW5wYWNrZWRfZW51bV9leHRlbnNpb24SKS5wcm90", 
-            "b2J1Zl91bml0dGVzdC5UZXN0VW5wYWNrZWRFeHRlbnNpb25zGGcgAygOMh4u", 
-            "cHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW1CAhAAQkFCDVVuaXR0ZXN0", 
-            "UHJvdG9IAYABAYgBAZABAfgBAaoCIUdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMu", 
-          "VGVzdFByb3Rvcw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_TestAllTypes__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder>(internal__static_protobuf_unittest_TestAllTypes__Descriptor,
-                new string[] { "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalGroup", "OptionalNestedMessage", "OptionalForeignMessage", "OptionalImportMessage", "OptionalNestedEnum", "OptionalForeignEnum", "OptionalImportEnum", "OptionalStringPiece", "OptionalCord", "OptionalPublicImportMessage", "OptionalLazyMessage", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedGroup", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedImportMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedImportEnum", "RepeatedStringPiece", "RepeatedCord", "RepeatedLazyMessage", "DefaultInt32", "DefaultInt64", "DefaultUint32", "DefaultUint64", "DefaultSint32", "DefaultSint64", "DefaultFixed32", "DefaultFixed64", "DefaultSfixed32", "DefaultSfixed64", "DefaultFloat", "DefaultDouble", "DefaultBool", "DefaultString", "DefaultBytes", "DefaultNestedEnum", "DefaultForeignEnum", "DefaultImportEnum", "DefaultStringPiece", "DefaultCord", "OneofUint32", "OneofNestedMessage", "OneofString", "OneofBytes", "OneofField", });
-        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor,
-                new string[] { "Bb", });
-        internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[1];
-        internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder>(internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[2];
-        internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder>(internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes, global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.Builder>(internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor,
-                new string[] { "Child", "Payload", "RepeatedChild", });
-        internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Builder>(internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor,
-                new string[] { "DeprecatedInt32", });
-        internal__static_protobuf_unittest_ForeignMessage__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder>(internal__static_protobuf_unittest_ForeignMessage__Descriptor,
-                new string[] { "C", });
-        internal__static_protobuf_unittest_TestReservedFields__Descriptor = Descriptor.MessageTypes[4];
-        internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReservedFields, global::Google.ProtocolBuffers.TestProtos.TestReservedFields.Builder>(internal__static_protobuf_unittest_TestReservedFields__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_TestAllExtensions__Descriptor = Descriptor.MessageTypes[5];
-        internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensions, global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Builder>(internal__static_protobuf_unittest_TestAllExtensions__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor = Descriptor.MessageTypes[6];
-        internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Builder>(internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor = Descriptor.MessageTypes[7];
-        internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Builder>(internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_TestNestedExtension__Descriptor = Descriptor.MessageTypes[8];
-        internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtension, global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Builder>(internal__static_protobuf_unittest_TestNestedExtension__Descriptor,
-                new string[] { });
-        global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Test = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.NestedStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor.Extensions[1]);
-        internal__static_protobuf_unittest_TestRequired__Descriptor = Descriptor.MessageTypes[9];
-        internal__static_protobuf_unittest_TestRequired__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequired, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder>(internal__static_protobuf_unittest_TestRequired__Descriptor,
-                new string[] { "A", "Dummy2", "B", "Dummy4", "Dummy5", "Dummy6", "Dummy7", "Dummy8", "Dummy9", "Dummy10", "Dummy11", "Dummy12", "Dummy13", "Dummy14", "Dummy15", "Dummy16", "Dummy17", "Dummy18", "Dummy19", "Dummy20", "Dummy21", "Dummy22", "Dummy23", "Dummy24", "Dummy25", "Dummy26", "Dummy27", "Dummy28", "Dummy29", "Dummy30", "Dummy31", "Dummy32", "C", });
-        global::Google.ProtocolBuffers.TestProtos.TestRequired.Single = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestRequired>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.TestRequired.Multi = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestRequired>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor.Extensions[1]);
-        internal__static_protobuf_unittest_TestRequiredForeign__Descriptor = Descriptor.MessageTypes[10];
-        internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign, global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Builder>(internal__static_protobuf_unittest_TestRequiredForeign__Descriptor,
-                new string[] { "OptionalMessage", "RepeatedMessage", "Dummy", });
-        internal__static_protobuf_unittest_TestForeignNested__Descriptor = Descriptor.MessageTypes[11];
-        internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestForeignNested, global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Builder>(internal__static_protobuf_unittest_TestForeignNested__Descriptor,
-                new string[] { "ForeignNested", });
-        internal__static_protobuf_unittest_TestEmptyMessage__Descriptor = Descriptor.MessageTypes[12];
-        internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Builder>(internal__static_protobuf_unittest_TestEmptyMessage__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor = Descriptor.MessageTypes[13];
-        internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Builder>(internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor = Descriptor.MessageTypes[14];
-        internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges, global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Builder>(internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor = Descriptor.MessageTypes[15];
-        internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber, global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Builder>(internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor,
-                new string[] { "A", "Bb", });
-        internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor = Descriptor.MessageTypes[16];
-        internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage, global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder>(internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor,
-                new string[] { "A", "I", });
-        internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor = Descriptor.MessageTypes[17];
-        internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder>(internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor,
-                new string[] { "Bb", });
-        internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor = Descriptor.MessageTypes[18];
-        internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder>(internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor,
-                new string[] { "A", "OptionalInt32", });
-        internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor = Descriptor.MessageTypes[19];
-        internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor,
-                new string[] { "A", "Foo", "Bar", });
-        internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor = internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor = internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor.NestedTypes[1];
-        internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_TestEagerMessage__Descriptor = Descriptor.MessageTypes[20];
-        internal__static_protobuf_unittest_TestEagerMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEagerMessage, global::Google.ProtocolBuffers.TestProtos.TestEagerMessage.Builder>(internal__static_protobuf_unittest_TestEagerMessage__Descriptor,
-                new string[] { "SubMessage", });
-        internal__static_protobuf_unittest_TestLazyMessage__Descriptor = Descriptor.MessageTypes[21];
-        internal__static_protobuf_unittest_TestLazyMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestLazyMessage, global::Google.ProtocolBuffers.TestProtos.TestLazyMessage.Builder>(internal__static_protobuf_unittest_TestLazyMessage__Descriptor,
-                new string[] { "SubMessage", });
-        internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor = Descriptor.MessageTypes[22];
-        internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Builder>(internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor,
-                new string[] { "OptionalNestedMessage", });
-        internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor,
-                new string[] { "NestedmessageRepeatedInt32", "NestedmessageRepeatedForeignmessage", });
-        internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor = Descriptor.MessageTypes[23];
-        internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames, global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Builder>(internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor,
-                new string[] { "PrimitiveField", "StringField", "EnumField", "MessageField", "StringPieceField", "CordField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedStringPieceField", "RepeatedCordField", });
-        internal__static_protobuf_unittest_TestFieldOrderings__Descriptor = Descriptor.MessageTypes[24];
-        internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Builder>(internal__static_protobuf_unittest_TestFieldOrderings__Descriptor,
-                new string[] { "MyString", "MyInt", "MyFloat", "OptionalNestedMessage", });
-        internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestFieldOrderings__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor,
-                new string[] { "Oo", "Bb", });
-        internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor = Descriptor.MessageTypes[25];
-        internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues, global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Builder>(internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor,
-                new string[] { "EscapedBytes", "LargeUint32", "LargeUint64", "SmallInt32", "SmallInt64", "ReallySmallInt32", "ReallySmallInt64", "Utf8String", "ZeroFloat", "OneFloat", "SmallFloat", "NegativeOneFloat", "NegativeFloat", "LargeFloat", "SmallNegativeFloat", "InfDouble", "NegInfDouble", "NanDouble", "InfFloat", "NegInfFloat", "NanFloat", "CppTrigraph", "StringWithZero", "BytesWithZero", "StringPieceWithZero", "CordWithZero", "ReplacementString", });
-        internal__static_protobuf_unittest_SparseEnumMessage__Descriptor = Descriptor.MessageTypes[26];
-        internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage, global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Builder>(internal__static_protobuf_unittest_SparseEnumMessage__Descriptor,
-                new string[] { "SparseEnum", });
-        internal__static_protobuf_unittest_OneString__Descriptor = Descriptor.MessageTypes[27];
-        internal__static_protobuf_unittest_OneString__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneString, global::Google.ProtocolBuffers.TestProtos.OneString.Builder>(internal__static_protobuf_unittest_OneString__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_MoreString__Descriptor = Descriptor.MessageTypes[28];
-        internal__static_protobuf_unittest_MoreString__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.MoreString, global::Google.ProtocolBuffers.TestProtos.MoreString.Builder>(internal__static_protobuf_unittest_MoreString__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_OneBytes__Descriptor = Descriptor.MessageTypes[29];
-        internal__static_protobuf_unittest_OneBytes__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneBytes, global::Google.ProtocolBuffers.TestProtos.OneBytes.Builder>(internal__static_protobuf_unittest_OneBytes__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_MoreBytes__Descriptor = Descriptor.MessageTypes[30];
-        internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.MoreBytes, global::Google.ProtocolBuffers.TestProtos.MoreBytes.Builder>(internal__static_protobuf_unittest_MoreBytes__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_Int32Message__Descriptor = Descriptor.MessageTypes[31];
-        internal__static_protobuf_unittest_Int32Message__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Int32Message, global::Google.ProtocolBuffers.TestProtos.Int32Message.Builder>(internal__static_protobuf_unittest_Int32Message__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_Uint32Message__Descriptor = Descriptor.MessageTypes[32];
-        internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Uint32Message, global::Google.ProtocolBuffers.TestProtos.Uint32Message.Builder>(internal__static_protobuf_unittest_Uint32Message__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_Int64Message__Descriptor = Descriptor.MessageTypes[33];
-        internal__static_protobuf_unittest_Int64Message__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Int64Message, global::Google.ProtocolBuffers.TestProtos.Int64Message.Builder>(internal__static_protobuf_unittest_Int64Message__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_Uint64Message__Descriptor = Descriptor.MessageTypes[34];
-        internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Uint64Message, global::Google.ProtocolBuffers.TestProtos.Uint64Message.Builder>(internal__static_protobuf_unittest_Uint64Message__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_BoolMessage__Descriptor = Descriptor.MessageTypes[35];
-        internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BoolMessage, global::Google.ProtocolBuffers.TestProtos.BoolMessage.Builder>(internal__static_protobuf_unittest_BoolMessage__Descriptor,
-                new string[] { "Data", });
-        internal__static_protobuf_unittest_TestOneof__Descriptor = Descriptor.MessageTypes[36];
-        internal__static_protobuf_unittest_TestOneof__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof, global::Google.ProtocolBuffers.TestProtos.TestOneof.Builder>(internal__static_protobuf_unittest_TestOneof__Descriptor,
-                new string[] { "FooInt", "FooString", "FooMessage", "FooGroup", "Foo", });
-        internal__static_protobuf_unittest_TestOneof_FooGroup__Descriptor = internal__static_protobuf_unittest_TestOneof__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestOneof_FooGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup, global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.Builder>(internal__static_protobuf_unittest_TestOneof_FooGroup__Descriptor,
-                new string[] { "A", "B", });
-        internal__static_protobuf_unittest_TestOneofBackwardsCompatible__Descriptor = Descriptor.MessageTypes[37];
-        internal__static_protobuf_unittest_TestOneofBackwardsCompatible__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible, global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Builder>(internal__static_protobuf_unittest_TestOneofBackwardsCompatible__Descriptor,
-                new string[] { "FooInt", "FooString", "FooMessage", "FooGroup", });
-        internal__static_protobuf_unittest_TestOneofBackwardsCompatible_FooGroup__Descriptor = internal__static_protobuf_unittest_TestOneofBackwardsCompatible__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestOneofBackwardsCompatible_FooGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup, global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.Builder>(internal__static_protobuf_unittest_TestOneofBackwardsCompatible_FooGroup__Descriptor,
-                new string[] { "A", "B", });
-        internal__static_protobuf_unittest_TestOneof2__Descriptor = Descriptor.MessageTypes[38];
-        internal__static_protobuf_unittest_TestOneof2__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof2, global::Google.ProtocolBuffers.TestProtos.TestOneof2.Builder>(internal__static_protobuf_unittest_TestOneof2__Descriptor,
-                new string[] { "FooInt", "FooString", "FooCord", "FooStringPiece", "FooBytes", "FooEnum", "FooMessage", "FooGroup", "FooLazyMessage", "BarInt", "BarString", "BarCord", "BarStringPiece", "BarBytes", "BarEnum", "BazInt", "BazString", "Foo", "Bar", });
-        internal__static_protobuf_unittest_TestOneof2_FooGroup__Descriptor = internal__static_protobuf_unittest_TestOneof2__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestOneof2_FooGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup, global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.Builder>(internal__static_protobuf_unittest_TestOneof2_FooGroup__Descriptor,
-                new string[] { "A", "B", });
-        internal__static_protobuf_unittest_TestOneof2_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestOneof2__Descriptor.NestedTypes[1];
-        internal__static_protobuf_unittest_TestOneof2_NestedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestOneof2_NestedMessage__Descriptor,
-                new string[] { "QuxInt", "CorgeInt", });
-        internal__static_protobuf_unittest_TestRequiredOneof__Descriptor = Descriptor.MessageTypes[39];
-        internal__static_protobuf_unittest_TestRequiredOneof__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof, global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Builder>(internal__static_protobuf_unittest_TestRequiredOneof__Descriptor,
-                new string[] { "FooInt", "FooString", "FooMessage", "Foo", });
-        internal__static_protobuf_unittest_TestRequiredOneof_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestRequiredOneof__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestRequiredOneof_NestedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestRequiredOneof_NestedMessage__Descriptor,
-                new string[] { "RequiredDouble", });
-        internal__static_protobuf_unittest_TestPackedTypes__Descriptor = Descriptor.MessageTypes[40];
-        internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypes, global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Builder>(internal__static_protobuf_unittest_TestPackedTypes__Descriptor,
-                new string[] { "PackedInt32", "PackedInt64", "PackedUint32", "PackedUint64", "PackedSint32", "PackedSint64", "PackedFixed32", "PackedFixed64", "PackedSfixed32", "PackedSfixed64", "PackedFloat", "PackedDouble", "PackedBool", "PackedEnum", });
-        internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor = Descriptor.MessageTypes[41];
-        internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes, global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Builder>(internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor,
-                new string[] { "UnpackedInt32", "UnpackedInt64", "UnpackedUint32", "UnpackedUint64", "UnpackedSint32", "UnpackedSint64", "UnpackedFixed32", "UnpackedFixed64", "UnpackedSfixed32", "UnpackedSfixed64", "UnpackedFloat", "UnpackedDouble", "UnpackedBool", "UnpackedEnum", });
-        internal__static_protobuf_unittest_TestPackedExtensions__Descriptor = Descriptor.MessageTypes[42];
-        internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Builder>(internal__static_protobuf_unittest_TestPackedExtensions__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_TestUnpackedExtensions__Descriptor = Descriptor.MessageTypes[43];
-        internal__static_protobuf_unittest_TestUnpackedExtensions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.Builder>(internal__static_protobuf_unittest_TestUnpackedExtensions__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor = Descriptor.MessageTypes[44];
-        internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Builder>(internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor,
-                new string[] { "ScalarExtension", "EnumExtension", "DynamicEnumExtension", "MessageExtension", "DynamicMessageExtension", "RepeatedExtension", "PackedExtension", });
-        internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor = internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder>(internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor,
-                new string[] { "DynamicField", });
-        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor = Descriptor.MessageTypes[45];
-        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes, global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Builder>(internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor,
-                new string[] { "RepeatedFixed32", "RepeatedInt32", "RepeatedFixed64", "RepeatedInt64", "RepeatedFloat", "RepeatedUint64", });
-        internal__static_protobuf_unittest_TestParsingMerge__Descriptor = Descriptor.MessageTypes[46];
-        internal__static_protobuf_unittest_TestParsingMerge__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Builder>(internal__static_protobuf_unittest_TestParsingMerge__Descriptor,
-                new string[] { "RequiredAllTypes", "OptionalAllTypes", "RepeatedAllTypes", "OptionalGroup", "RepeatedGroup", });
-        internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__Descriptor = internal__static_protobuf_unittest_TestParsingMerge__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Builder>(internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__Descriptor,
-                new string[] { "Field1", "Field2", "Field3", "Group1", "Group2", "Ext1", "Ext2", });
-        internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group1__Descriptor = internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group1__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1.Builder>(internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group1__Descriptor,
-                new string[] { "Field1", });
-        internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group2__Descriptor = internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__Descriptor.NestedTypes[1];
-        internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group2__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2.Builder>(internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group2__Descriptor,
-                new string[] { "Field1", });
-        internal__static_protobuf_unittest_TestParsingMerge_OptionalGroup__Descriptor = internal__static_protobuf_unittest_TestParsingMerge__Descriptor.NestedTypes[1];
-        internal__static_protobuf_unittest_TestParsingMerge_OptionalGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.Builder>(internal__static_protobuf_unittest_TestParsingMerge_OptionalGroup__Descriptor,
-                new string[] { "OptionalGroupAllTypes", });
-        internal__static_protobuf_unittest_TestParsingMerge_RepeatedGroup__Descriptor = internal__static_protobuf_unittest_TestParsingMerge__Descriptor.NestedTypes[2];
-        internal__static_protobuf_unittest_TestParsingMerge_RepeatedGroup__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup.Builder>(internal__static_protobuf_unittest_TestParsingMerge_RepeatedGroup__Descriptor,
-                new string[] { "RepeatedGroupAllTypes", });
-        global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.OptionalExt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.RepeatedExt = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Descriptor.Extensions[1]);
-        internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor = Descriptor.MessageTypes[47];
-        internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCommentInjectionMessage, global::Google.ProtocolBuffers.TestProtos.TestCommentInjectionMessage.Builder>(internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor,
-                new string[] { "A", });
-        internal__static_protobuf_unittest_FooRequest__Descriptor = Descriptor.MessageTypes[48];
-        internal__static_protobuf_unittest_FooRequest__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooRequest, global::Google.ProtocolBuffers.TestProtos.FooRequest.Builder>(internal__static_protobuf_unittest_FooRequest__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_FooResponse__Descriptor = Descriptor.MessageTypes[49];
-        internal__static_protobuf_unittest_FooResponse__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder>(internal__static_protobuf_unittest_FooResponse__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_FooClientMessage__Descriptor = Descriptor.MessageTypes[50];
-        internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooClientMessage, global::Google.ProtocolBuffers.TestProtos.FooClientMessage.Builder>(internal__static_protobuf_unittest_FooClientMessage__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_FooServerMessage__Descriptor = Descriptor.MessageTypes[51];
-        internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooServerMessage, global::Google.ProtocolBuffers.TestProtos.FooServerMessage.Builder>(internal__static_protobuf_unittest_FooServerMessage__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_BarRequest__Descriptor = Descriptor.MessageTypes[52];
-        internal__static_protobuf_unittest_BarRequest__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarRequest, global::Google.ProtocolBuffers.TestProtos.BarRequest.Builder>(internal__static_protobuf_unittest_BarRequest__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_BarResponse__Descriptor = Descriptor.MessageTypes[53];
-        internal__static_protobuf_unittest_BarResponse__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder>(internal__static_protobuf_unittest_BarResponse__Descriptor,
-                new string[] { });
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalInt32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalInt64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[1]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[2]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalUint64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[3]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalSint32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[4]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalSint64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[5]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalFixed32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[6]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalFixed64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[7]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalSfixed32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[8]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalSfixed64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[9]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalFloatExtension = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[10]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalDoubleExtension = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[11]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalBoolExtension = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[12]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[13]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[14]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalGroupExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[15]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalNestedMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[16]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalForeignMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[17]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalImportMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[18]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalNestedEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[19]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalForeignEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[20]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalImportEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[21]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalStringPieceExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[22]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalCordExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[23]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalPublicImportMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.PublicImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[24]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OptionalLazyMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[25]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[26]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[27]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[28]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[29]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[30]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[31]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[32]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[33]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[34]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[35]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[36]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[37]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[38]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedStringExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[39]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedBytesExtension = pb::GeneratedRepeatExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[40]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedGroupExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[41]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedNestedMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[42]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedForeignMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[43]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedImportMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[44]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedNestedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[45]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedForeignEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[46]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedImportEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[47]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedStringPieceExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[48]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedCordExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[49]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RepeatedLazyMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[50]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultInt32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[51]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultInt64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[52]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[53]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultUint64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[54]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultSint32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[55]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultSint64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[56]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultFixed32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[57]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultFixed64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[58]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultSfixed32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[59]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultSfixed64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[60]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultFloatExtension = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[61]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultDoubleExtension = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[62]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultBoolExtension = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[63]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[64]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[65]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultNestedEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[66]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultForeignEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[67]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultImportEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[68]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultStringPieceExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[69]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.DefaultCordExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[70]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OneofUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[71]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OneofNestedMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[72]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OneofStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[73]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.OneofBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[74]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.MyExtensionString = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[75]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.MyExtensionInt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[76]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[77]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[78]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[79]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[80]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[81]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[82]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[83]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[84]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[85]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[86]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[87]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[88]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[89]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.PackedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[90]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[91]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[92]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[93]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[94]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[95]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[96]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[97]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[98]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[99]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[100]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[101]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[102]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[103]);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.UnpackedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor.Extensions[104]);
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.TestProtos.UnittestImport.RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          global::Google.ProtocolBuffers.TestProtos.UnittestImport.Descriptor, 
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Enums
-  public enum ForeignEnum {
-    FOREIGN_FOO = 4,
-    FOREIGN_BAR = 5,
-    FOREIGN_BAZ = 6,
-  }
-
-  public enum TestEnumWithDupValue {
-    FOO1 = 1,
-    BAR1 = 2,
-    BAZ = 3,
-    FOO2 = 1,
-    BAR2 = 2,
-  }
-
-  public enum TestSparseEnum {
-    SPARSE_A = 123,
-    SPARSE_B = 62374,
-    SPARSE_C = 12589234,
-    SPARSE_D = -15,
-    SPARSE_E = -53452,
-    SPARSE_F = 0,
-    SPARSE_G = 2,
-  }
-
-  #endregion
-
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestAllTypes : pb::GeneratedMessage<TestAllTypes, TestAllTypes.Builder> {
-    private TestAllTypes() { }
-    private static readonly TestAllTypes defaultInstance = new TestAllTypes().MakeReadOnly();
-    private static readonly string[] _testAllTypesFieldNames = new string[] { "default_bool", "default_bytes", "default_cord", "default_double", "default_fixed32", "default_fixed64", "default_float", "default_foreign_enum", "default_import_enum", "default_int32", "default_int64", "default_nested_enum", "default_sfixed32", "default_sfixed64", "default_sint32", "default_sint64", "default_string", "default_string_piece", "default_uint32", "default_uint64", "oneof_bytes", "oneof_nested_message", "oneof_string", "oneof_uint32", "optional_bool", "optional_bytes", "optional_cord", "optional_double", "optional_fixed32", "optional_fixed64", "optional_float", "optional_foreign_enum", "optional_foreign_message", "optional_import_enum", "optional_import_message", "optional_int32", "optional_int64", "optional_lazy_message", "optional_nested_enum", "optional_nested_message", "optional_public_import_message", "optional_sfixed32", "optional_sfixed64", "optional_sint32", "optional_sint64", "optional_string", "optional_string_piece", "optional_uint32", "optional_uint64", "optionalgroup", "repeated_bool", "repeated_bytes", "repeated_cord", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_import_enum", "repeated_import_message", "repeated_int32", "repeated_int64", "repeated_lazy_message", "repeated_nested_enum", "repeated_nested_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_string_piece", "repeated_uint32", "repeated_uint64", "repeatedgroup" };
-    private static readonly uint[] _testAllTypesFieldTags = new uint[] { 584, 602, 682, 577, 541, 545, 573, 656, 664, 488, 496, 648, 557, 561, 520, 528, 594, 674, 504, 512, 914, 898, 906, 888, 104, 122, 202, 97, 61, 65, 93, 176, 154, 184, 162, 8, 16, 218, 168, 146, 210, 77, 81, 40, 48, 114, 194, 24, 32, 131, 344, 362, 442, 337, 301, 305, 333, 416, 394, 424, 402, 248, 256, 458, 408, 386, 317, 321, 280, 288, 354, 434, 264, 272, 371 };
-    public static TestAllTypes DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestAllTypes DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestAllTypes ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllTypes__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestAllTypes, TestAllTypes.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum NestedEnum {
-        FOO = 1,
-        BAR = 2,
-        BAZ = 3,
-        NEG = -1,
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {
-        private NestedMessage() { }
-        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();
-        private static readonly string[] _nestedMessageFieldNames = new string[] { "bb" };
-        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8 };
-        public static NestedMessage DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override NestedMessage DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override NestedMessage ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable; }
-        }
-
-        public const int BbFieldNumber = 1;
-        private bool hasBb;
-        private int bb_;
-        public bool HasBb {
-          get { return hasBb; }
-        }
-        public int Bb {
-          get { return bb_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _nestedMessageFieldNames;
-          if (hasBb) {
-            output.WriteInt32(1, field_names[0], Bb);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasBb) {
-            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private NestedMessage MakeReadOnly() {
-          return this;
-        }
-
-        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(NestedMessage prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(NestedMessage cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private NestedMessage result;
-
-          private NestedMessage PrepareBuilder() {
-            if (resultIsReadOnly) {
-              NestedMessage original = result;
-              result = new NestedMessage();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override NestedMessage MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Descriptor; }
-          }
-
-          public override NestedMessage DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-          }
-
-          public override NestedMessage BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is NestedMessage) {
-              return MergeFrom((NestedMessage) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(NestedMessage other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasBb) {
-              Bb = other.Bb;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _nestedMessageFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 8: {
-                  result.hasBb = input.ReadInt32(ref result.bb_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasBb {
-            get { return result.hasBb; }
-          }
-          public int Bb {
-            get { return result.Bb; }
-            set { SetBb(value); }
-          }
-          public Builder SetBb(int value) {
-            PrepareBuilder();
-            result.hasBb = true;
-            result.bb_ = value;
-            return this;
-          }
-          public Builder ClearBb() {
-            PrepareBuilder();
-            result.hasBb = false;
-            result.bb_ = 0;
-            return this;
-          }
-        }
-        static NestedMessage() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class OptionalGroup : pb::GeneratedMessage<OptionalGroup, OptionalGroup.Builder> {
-        private OptionalGroup() { }
-        private static readonly OptionalGroup defaultInstance = new OptionalGroup().MakeReadOnly();
-        private static readonly string[] _optionalGroupFieldNames = new string[] { "a" };
-        private static readonly uint[] _optionalGroupFieldTags = new uint[] { 136 };
-        public static OptionalGroup DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override OptionalGroup DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override OptionalGroup ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup, OptionalGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable; }
-        }
-
-        public const int AFieldNumber = 17;
-        private bool hasA;
-        private int a_;
-        public bool HasA {
-          get { return hasA; }
-        }
-        public int A {
-          get { return a_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _optionalGroupFieldNames;
-          if (hasA) {
-            output.WriteInt32(17, field_names[0], A);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasA) {
-            size += pb::CodedOutputStream.ComputeInt32Size(17, A);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static OptionalGroup ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private OptionalGroup MakeReadOnly() {
-          return this;
-        }
-
-        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(OptionalGroup prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(OptionalGroup cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private OptionalGroup result;
-
-          private OptionalGroup PrepareBuilder() {
-            if (resultIsReadOnly) {
-              OptionalGroup original = result;
-              result = new OptionalGroup();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override OptionalGroup MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Descriptor; }
-          }
-
-          public override OptionalGroup DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance; }
-          }
-
-          public override OptionalGroup BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is OptionalGroup) {
-              return MergeFrom((OptionalGroup) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(OptionalGroup other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasA) {
-              A = other.A;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_optionalGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _optionalGroupFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 136: {
-                  result.hasA = input.ReadInt32(ref result.a_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasA {
-            get { return result.hasA; }
-          }
-          public int A {
-            get { return result.A; }
-            set { SetA(value); }
-          }
-          public Builder SetA(int value) {
-            PrepareBuilder();
-            result.hasA = true;
-            result.a_ = value;
-            return this;
-          }
-          public Builder ClearA() {
-            PrepareBuilder();
-            result.hasA = false;
-            result.a_ = 0;
-            return this;
-          }
-        }
-        static OptionalGroup() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class RepeatedGroup : pb::GeneratedMessage<RepeatedGroup, RepeatedGroup.Builder> {
-        private RepeatedGroup() { }
-        private static readonly RepeatedGroup defaultInstance = new RepeatedGroup().MakeReadOnly();
-        private static readonly string[] _repeatedGroupFieldNames = new string[] { "a" };
-        private static readonly uint[] _repeatedGroupFieldTags = new uint[] { 376 };
-        public static RepeatedGroup DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override RepeatedGroup DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override RepeatedGroup ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup, RepeatedGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable; }
-        }
-
-        public const int AFieldNumber = 47;
-        private bool hasA;
-        private int a_;
-        public bool HasA {
-          get { return hasA; }
-        }
-        public int A {
-          get { return a_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _repeatedGroupFieldNames;
-          if (hasA) {
-            output.WriteInt32(47, field_names[0], A);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasA) {
-            size += pb::CodedOutputStream.ComputeInt32Size(47, A);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static RepeatedGroup ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private RepeatedGroup MakeReadOnly() {
-          return this;
-        }
-
-        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(RepeatedGroup prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(RepeatedGroup cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private RepeatedGroup result;
-
-          private RepeatedGroup PrepareBuilder() {
-            if (resultIsReadOnly) {
-              RepeatedGroup original = result;
-              result = new RepeatedGroup();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override RepeatedGroup MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Descriptor; }
-          }
-
-          public override RepeatedGroup DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance; }
-          }
-
-          public override RepeatedGroup BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is RepeatedGroup) {
-              return MergeFrom((RepeatedGroup) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(RepeatedGroup other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasA) {
-              A = other.A;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _repeatedGroupFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 376: {
-                  result.hasA = input.ReadInt32(ref result.a_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasA {
-            get { return result.hasA; }
-          }
-          public int A {
-            get { return result.A; }
-            set { SetA(value); }
-          }
-          public Builder SetA(int value) {
-            PrepareBuilder();
-            result.hasA = true;
-            result.a_ = value;
-            return this;
-          }
-          public Builder ClearA() {
-            PrepareBuilder();
-            result.hasA = false;
-            result.a_ = 0;
-            return this;
-          }
-        }
-        static RepeatedGroup() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    private object oneofField_;
-    public enum OneofFieldOneofCase {
-      OneofUint32 = 111,
-      OneofNestedMessage = 112,
-      OneofString = 113,
-      OneofBytes = 114,
-      None = 0,
-    }
-    private OneofFieldOneofCase oneofFieldCase_ = OneofFieldOneofCase.None;
-    public OneofFieldOneofCase OneofFieldCase {
-      get { return oneofFieldCase_; }
-    }
-
-    public const int OptionalInt32FieldNumber = 1;
-    private bool hasOptionalInt32;
-    private int optionalInt32_;
-    public bool HasOptionalInt32 {
-      get { return hasOptionalInt32; }
-    }
-    public int OptionalInt32 {
-      get { return optionalInt32_; }
-    }
-
-    public const int OptionalInt64FieldNumber = 2;
-    private bool hasOptionalInt64;
-    private long optionalInt64_;
-    public bool HasOptionalInt64 {
-      get { return hasOptionalInt64; }
-    }
-    public long OptionalInt64 {
-      get { return optionalInt64_; }
-    }
-
-    public const int OptionalUint32FieldNumber = 3;
-    private bool hasOptionalUint32;
-    private uint optionalUint32_;
-    public bool HasOptionalUint32 {
-      get { return hasOptionalUint32; }
-    }
-    public uint OptionalUint32 {
-      get { return optionalUint32_; }
-    }
-
-    public const int OptionalUint64FieldNumber = 4;
-    private bool hasOptionalUint64;
-    private ulong optionalUint64_;
-    public bool HasOptionalUint64 {
-      get { return hasOptionalUint64; }
-    }
-    public ulong OptionalUint64 {
-      get { return optionalUint64_; }
-    }
-
-    public const int OptionalSint32FieldNumber = 5;
-    private bool hasOptionalSint32;
-    private int optionalSint32_;
-    public bool HasOptionalSint32 {
-      get { return hasOptionalSint32; }
-    }
-    public int OptionalSint32 {
-      get { return optionalSint32_; }
-    }
-
-    public const int OptionalSint64FieldNumber = 6;
-    private bool hasOptionalSint64;
-    private long optionalSint64_;
-    public bool HasOptionalSint64 {
-      get { return hasOptionalSint64; }
-    }
-    public long OptionalSint64 {
-      get { return optionalSint64_; }
-    }
-
-    public const int OptionalFixed32FieldNumber = 7;
-    private bool hasOptionalFixed32;
-    private uint optionalFixed32_;
-    public bool HasOptionalFixed32 {
-      get { return hasOptionalFixed32; }
-    }
-    public uint OptionalFixed32 {
-      get { return optionalFixed32_; }
-    }
-
-    public const int OptionalFixed64FieldNumber = 8;
-    private bool hasOptionalFixed64;
-    private ulong optionalFixed64_;
-    public bool HasOptionalFixed64 {
-      get { return hasOptionalFixed64; }
-    }
-    public ulong OptionalFixed64 {
-      get { return optionalFixed64_; }
-    }
-
-    public const int OptionalSfixed32FieldNumber = 9;
-    private bool hasOptionalSfixed32;
-    private int optionalSfixed32_;
-    public bool HasOptionalSfixed32 {
-      get { return hasOptionalSfixed32; }
-    }
-    public int OptionalSfixed32 {
-      get { return optionalSfixed32_; }
-    }
-
-    public const int OptionalSfixed64FieldNumber = 10;
-    private bool hasOptionalSfixed64;
-    private long optionalSfixed64_;
-    public bool HasOptionalSfixed64 {
-      get { return hasOptionalSfixed64; }
-    }
-    public long OptionalSfixed64 {
-      get { return optionalSfixed64_; }
-    }
-
-    public const int OptionalFloatFieldNumber = 11;
-    private bool hasOptionalFloat;
-    private float optionalFloat_;
-    public bool HasOptionalFloat {
-      get { return hasOptionalFloat; }
-    }
-    public float OptionalFloat {
-      get { return optionalFloat_; }
-    }
-
-    public const int OptionalDoubleFieldNumber = 12;
-    private bool hasOptionalDouble;
-    private double optionalDouble_;
-    public bool HasOptionalDouble {
-      get { return hasOptionalDouble; }
-    }
-    public double OptionalDouble {
-      get { return optionalDouble_; }
-    }
-
-    public const int OptionalBoolFieldNumber = 13;
-    private bool hasOptionalBool;
-    private bool optionalBool_;
-    public bool HasOptionalBool {
-      get { return hasOptionalBool; }
-    }
-    public bool OptionalBool {
-      get { return optionalBool_; }
-    }
-
-    public const int OptionalStringFieldNumber = 14;
-    private bool hasOptionalString;
-    private string optionalString_ = "";
-    public bool HasOptionalString {
-      get { return hasOptionalString; }
-    }
-    public string OptionalString {
-      get { return optionalString_; }
-    }
-
-    public const int OptionalBytesFieldNumber = 15;
-    private bool hasOptionalBytes;
-    private pb::ByteString optionalBytes_ = pb::ByteString.Empty;
-    public bool HasOptionalBytes {
-      get { return hasOptionalBytes; }
-    }
-    public pb::ByteString OptionalBytes {
-      get { return optionalBytes_; }
-    }
-
-    public const int OptionalGroupFieldNumber = 16;
-    private bool hasOptionalGroup;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup optionalGroup_;
-    public bool HasOptionalGroup {
-      get { return hasOptionalGroup; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup OptionalGroup {
-      get { return optionalGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance; }
-    }
-
-    public const int OptionalNestedMessageFieldNumber = 18;
-    private bool hasOptionalNestedMessage;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage optionalNestedMessage_;
-    public bool HasOptionalNestedMessage {
-      get { return hasOptionalNestedMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalNestedMessage {
-      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public const int OptionalForeignMessageFieldNumber = 19;
-    private bool hasOptionalForeignMessage;
-    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage optionalForeignMessage_;
-    public bool HasOptionalForeignMessage {
-      get { return hasOptionalForeignMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage OptionalForeignMessage {
-      get { return optionalForeignMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }
-    }
-
-    public const int OptionalImportMessageFieldNumber = 20;
-    private bool hasOptionalImportMessage;
-    private global::Google.ProtocolBuffers.TestProtos.ImportMessage optionalImportMessage_;
-    public bool HasOptionalImportMessage {
-      get { return hasOptionalImportMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ImportMessage OptionalImportMessage {
-      get { return optionalImportMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance; }
-    }
-
-    public const int OptionalNestedEnumFieldNumber = 21;
-    private bool hasOptionalNestedEnum;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.FOO;
-    public bool HasOptionalNestedEnum {
-      get { return hasOptionalNestedEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum OptionalNestedEnum {
-      get { return optionalNestedEnum_; }
-    }
-
-    public const int OptionalForeignEnumFieldNumber = 22;
-    private bool hasOptionalForeignEnum;
-    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;
-    public bool HasOptionalForeignEnum {
-      get { return hasOptionalForeignEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum OptionalForeignEnum {
-      get { return optionalForeignEnum_; }
-    }
-
-    public const int OptionalImportEnumFieldNumber = 23;
-    private bool hasOptionalImportEnum;
-    private global::Google.ProtocolBuffers.TestProtos.ImportEnum optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_FOO;
-    public bool HasOptionalImportEnum {
-      get { return hasOptionalImportEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ImportEnum OptionalImportEnum {
-      get { return optionalImportEnum_; }
-    }
-
-    public const int OptionalStringPieceFieldNumber = 24;
-    private bool hasOptionalStringPiece;
-    private string optionalStringPiece_ = "";
-    public bool HasOptionalStringPiece {
-      get { return hasOptionalStringPiece; }
-    }
-    public string OptionalStringPiece {
-      get { return optionalStringPiece_; }
-    }
-
-    public const int OptionalCordFieldNumber = 25;
-    private bool hasOptionalCord;
-    private string optionalCord_ = "";
-    public bool HasOptionalCord {
-      get { return hasOptionalCord; }
-    }
-    public string OptionalCord {
-      get { return optionalCord_; }
-    }
-
-    public const int OptionalPublicImportMessageFieldNumber = 26;
-    private bool hasOptionalPublicImportMessage;
-    private global::Google.ProtocolBuffers.TestProtos.PublicImportMessage optionalPublicImportMessage_;
-    public bool HasOptionalPublicImportMessage {
-      get { return hasOptionalPublicImportMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.PublicImportMessage OptionalPublicImportMessage {
-      get { return optionalPublicImportMessage_ ?? global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.DefaultInstance; }
-    }
-
-    public const int OptionalLazyMessageFieldNumber = 27;
-    private bool hasOptionalLazyMessage;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage optionalLazyMessage_;
-    public bool HasOptionalLazyMessage {
-      get { return hasOptionalLazyMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalLazyMessage {
-      get { return optionalLazyMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public const int RepeatedInt32FieldNumber = 31;
-    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> RepeatedInt32List {
-      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }
-    }
-    public int RepeatedInt32Count {
-      get { return repeatedInt32_.Count; }
-    }
-    public int GetRepeatedInt32(int index) {
-      return repeatedInt32_[index];
-    }
-
-    public const int RepeatedInt64FieldNumber = 32;
-    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> RepeatedInt64List {
-      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }
-    }
-    public int RepeatedInt64Count {
-      get { return repeatedInt64_.Count; }
-    }
-    public long GetRepeatedInt64(int index) {
-      return repeatedInt64_[index];
-    }
-
-    public const int RepeatedUint32FieldNumber = 33;
-    private pbc::PopsicleList<uint> repeatedUint32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> RepeatedUint32List {
-      get { return pbc::Lists.AsReadOnly(repeatedUint32_); }
-    }
-    public int RepeatedUint32Count {
-      get { return repeatedUint32_.Count; }
-    }
-    public uint GetRepeatedUint32(int index) {
-      return repeatedUint32_[index];
-    }
-
-    public const int RepeatedUint64FieldNumber = 34;
-    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> RepeatedUint64List {
-      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }
-    }
-    public int RepeatedUint64Count {
-      get { return repeatedUint64_.Count; }
-    }
-    public ulong GetRepeatedUint64(int index) {
-      return repeatedUint64_[index];
-    }
-
-    public const int RepeatedSint32FieldNumber = 35;
-    private pbc::PopsicleList<int> repeatedSint32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> RepeatedSint32List {
-      get { return pbc::Lists.AsReadOnly(repeatedSint32_); }
-    }
-    public int RepeatedSint32Count {
-      get { return repeatedSint32_.Count; }
-    }
-    public int GetRepeatedSint32(int index) {
-      return repeatedSint32_[index];
-    }
-
-    public const int RepeatedSint64FieldNumber = 36;
-    private pbc::PopsicleList<long> repeatedSint64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> RepeatedSint64List {
-      get { return pbc::Lists.AsReadOnly(repeatedSint64_); }
-    }
-    public int RepeatedSint64Count {
-      get { return repeatedSint64_.Count; }
-    }
-    public long GetRepeatedSint64(int index) {
-      return repeatedSint64_[index];
-    }
-
-    public const int RepeatedFixed32FieldNumber = 37;
-    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> RepeatedFixed32List {
-      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }
-    }
-    public int RepeatedFixed32Count {
-      get { return repeatedFixed32_.Count; }
-    }
-    public uint GetRepeatedFixed32(int index) {
-      return repeatedFixed32_[index];
-    }
-
-    public const int RepeatedFixed64FieldNumber = 38;
-    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> RepeatedFixed64List {
-      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }
-    }
-    public int RepeatedFixed64Count {
-      get { return repeatedFixed64_.Count; }
-    }
-    public ulong GetRepeatedFixed64(int index) {
-      return repeatedFixed64_[index];
-    }
-
-    public const int RepeatedSfixed32FieldNumber = 39;
-    private pbc::PopsicleList<int> repeatedSfixed32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> RepeatedSfixed32List {
-      get { return pbc::Lists.AsReadOnly(repeatedSfixed32_); }
-    }
-    public int RepeatedSfixed32Count {
-      get { return repeatedSfixed32_.Count; }
-    }
-    public int GetRepeatedSfixed32(int index) {
-      return repeatedSfixed32_[index];
-    }
-
-    public const int RepeatedSfixed64FieldNumber = 40;
-    private pbc::PopsicleList<long> repeatedSfixed64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> RepeatedSfixed64List {
-      get { return pbc::Lists.AsReadOnly(repeatedSfixed64_); }
-    }
-    public int RepeatedSfixed64Count {
-      get { return repeatedSfixed64_.Count; }
-    }
-    public long GetRepeatedSfixed64(int index) {
-      return repeatedSfixed64_[index];
-    }
-
-    public const int RepeatedFloatFieldNumber = 41;
-    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();
-    public scg::IList<float> RepeatedFloatList {
-      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }
-    }
-    public int RepeatedFloatCount {
-      get { return repeatedFloat_.Count; }
-    }
-    public float GetRepeatedFloat(int index) {
-      return repeatedFloat_[index];
-    }
-
-    public const int RepeatedDoubleFieldNumber = 42;
-    private pbc::PopsicleList<double> repeatedDouble_ = new pbc::PopsicleList<double>();
-    public scg::IList<double> RepeatedDoubleList {
-      get { return pbc::Lists.AsReadOnly(repeatedDouble_); }
-    }
-    public int RepeatedDoubleCount {
-      get { return repeatedDouble_.Count; }
-    }
-    public double GetRepeatedDouble(int index) {
-      return repeatedDouble_[index];
-    }
-
-    public const int RepeatedBoolFieldNumber = 43;
-    private pbc::PopsicleList<bool> repeatedBool_ = new pbc::PopsicleList<bool>();
-    public scg::IList<bool> RepeatedBoolList {
-      get { return pbc::Lists.AsReadOnly(repeatedBool_); }
-    }
-    public int RepeatedBoolCount {
-      get { return repeatedBool_.Count; }
-    }
-    public bool GetRepeatedBool(int index) {
-      return repeatedBool_[index];
-    }
-
-    public const int RepeatedStringFieldNumber = 44;
-    private pbc::PopsicleList<string> repeatedString_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedStringList {
-      get { return pbc::Lists.AsReadOnly(repeatedString_); }
-    }
-    public int RepeatedStringCount {
-      get { return repeatedString_.Count; }
-    }
-    public string GetRepeatedString(int index) {
-      return repeatedString_[index];
-    }
-
-    public const int RepeatedBytesFieldNumber = 45;
-    private pbc::PopsicleList<pb::ByteString> repeatedBytes_ = new pbc::PopsicleList<pb::ByteString>();
-    public scg::IList<pb::ByteString> RepeatedBytesList {
-      get { return pbc::Lists.AsReadOnly(repeatedBytes_); }
-    }
-    public int RepeatedBytesCount {
-      get { return repeatedBytes_.Count; }
-    }
-    public pb::ByteString GetRepeatedBytes(int index) {
-      return repeatedBytes_[index];
-    }
-
-    public const int RepeatedGroupFieldNumber = 46;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> repeatedGroup_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> RepeatedGroupList {
-      get { return repeatedGroup_; }
-    }
-    public int RepeatedGroupCount {
-      get { return repeatedGroup_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup GetRepeatedGroup(int index) {
-      return repeatedGroup_[index];
-    }
-
-    public const int RepeatedNestedMessageFieldNumber = 48;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> repeatedNestedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {
-      get { return repeatedNestedMessage_; }
-    }
-    public int RepeatedNestedMessageCount {
-      get { return repeatedNestedMessage_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {
-      return repeatedNestedMessage_[index];
-    }
-
-    public const int RepeatedForeignMessageFieldNumber = 49;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> repeatedForeignMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedForeignMessageList {
-      get { return repeatedForeignMessage_; }
-    }
-    public int RepeatedForeignMessageCount {
-      get { return repeatedForeignMessage_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedForeignMessage(int index) {
-      return repeatedForeignMessage_[index];
-    }
-
-    public const int RepeatedImportMessageFieldNumber = 50;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> repeatedImportMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> RepeatedImportMessageList {
-      get { return repeatedImportMessage_; }
-    }
-    public int RepeatedImportMessageCount {
-      get { return repeatedImportMessage_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ImportMessage GetRepeatedImportMessage(int index) {
-      return repeatedImportMessage_[index];
-    }
-
-    public const int RepeatedNestedEnumFieldNumber = 51;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> repeatedNestedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {
-      get { return pbc::Lists.AsReadOnly(repeatedNestedEnum_); }
-    }
-    public int RepeatedNestedEnumCount {
-      get { return repeatedNestedEnum_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {
-      return repeatedNestedEnum_[index];
-    }
-
-    public const int RepeatedForeignEnumFieldNumber = 52;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> repeatedForeignEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedForeignEnumList {
-      get { return pbc::Lists.AsReadOnly(repeatedForeignEnum_); }
-    }
-    public int RepeatedForeignEnumCount {
-      get { return repeatedForeignEnum_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedForeignEnum(int index) {
-      return repeatedForeignEnum_[index];
-    }
-
-    public const int RepeatedImportEnumFieldNumber = 53;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> repeatedImportEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> RepeatedImportEnumList {
-      get { return pbc::Lists.AsReadOnly(repeatedImportEnum_); }
-    }
-    public int RepeatedImportEnumCount {
-      get { return repeatedImportEnum_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ImportEnum GetRepeatedImportEnum(int index) {
-      return repeatedImportEnum_[index];
-    }
-
-    public const int RepeatedStringPieceFieldNumber = 54;
-    private pbc::PopsicleList<string> repeatedStringPiece_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedStringPieceList {
-      get { return pbc::Lists.AsReadOnly(repeatedStringPiece_); }
-    }
-    public int RepeatedStringPieceCount {
-      get { return repeatedStringPiece_.Count; }
-    }
-    public string GetRepeatedStringPiece(int index) {
-      return repeatedStringPiece_[index];
-    }
-
-    public const int RepeatedCordFieldNumber = 55;
-    private pbc::PopsicleList<string> repeatedCord_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedCordList {
-      get { return pbc::Lists.AsReadOnly(repeatedCord_); }
-    }
-    public int RepeatedCordCount {
-      get { return repeatedCord_.Count; }
-    }
-    public string GetRepeatedCord(int index) {
-      return repeatedCord_[index];
-    }
-
-    public const int RepeatedLazyMessageFieldNumber = 57;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> repeatedLazyMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedLazyMessageList {
-      get { return repeatedLazyMessage_; }
-    }
-    public int RepeatedLazyMessageCount {
-      get { return repeatedLazyMessage_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedLazyMessage(int index) {
-      return repeatedLazyMessage_[index];
-    }
-
-    public const int DefaultInt32FieldNumber = 61;
-    private bool hasDefaultInt32;
-    private int defaultInt32_ = 41;
-    public bool HasDefaultInt32 {
-      get { return hasDefaultInt32; }
-    }
-    public int DefaultInt32 {
-      get { return defaultInt32_; }
-    }
-
-    public const int DefaultInt64FieldNumber = 62;
-    private bool hasDefaultInt64;
-    private long defaultInt64_ = 42L;
-    public bool HasDefaultInt64 {
-      get { return hasDefaultInt64; }
-    }
-    public long DefaultInt64 {
-      get { return defaultInt64_; }
-    }
-
-    public const int DefaultUint32FieldNumber = 63;
-    private bool hasDefaultUint32;
-    private uint defaultUint32_ = 43;
-    public bool HasDefaultUint32 {
-      get { return hasDefaultUint32; }
-    }
-    public uint DefaultUint32 {
-      get { return defaultUint32_; }
-    }
-
-    public const int DefaultUint64FieldNumber = 64;
-    private bool hasDefaultUint64;
-    private ulong defaultUint64_ = 44UL;
-    public bool HasDefaultUint64 {
-      get { return hasDefaultUint64; }
-    }
-    public ulong DefaultUint64 {
-      get { return defaultUint64_; }
-    }
-
-    public const int DefaultSint32FieldNumber = 65;
-    private bool hasDefaultSint32;
-    private int defaultSint32_ = -45;
-    public bool HasDefaultSint32 {
-      get { return hasDefaultSint32; }
-    }
-    public int DefaultSint32 {
-      get { return defaultSint32_; }
-    }
-
-    public const int DefaultSint64FieldNumber = 66;
-    private bool hasDefaultSint64;
-    private long defaultSint64_ = 46L;
-    public bool HasDefaultSint64 {
-      get { return hasDefaultSint64; }
-    }
-    public long DefaultSint64 {
-      get { return defaultSint64_; }
-    }
-
-    public const int DefaultFixed32FieldNumber = 67;
-    private bool hasDefaultFixed32;
-    private uint defaultFixed32_ = 47;
-    public bool HasDefaultFixed32 {
-      get { return hasDefaultFixed32; }
-    }
-    public uint DefaultFixed32 {
-      get { return defaultFixed32_; }
-    }
-
-    public const int DefaultFixed64FieldNumber = 68;
-    private bool hasDefaultFixed64;
-    private ulong defaultFixed64_ = 48UL;
-    public bool HasDefaultFixed64 {
-      get { return hasDefaultFixed64; }
-    }
-    public ulong DefaultFixed64 {
-      get { return defaultFixed64_; }
-    }
-
-    public const int DefaultSfixed32FieldNumber = 69;
-    private bool hasDefaultSfixed32;
-    private int defaultSfixed32_ = 49;
-    public bool HasDefaultSfixed32 {
-      get { return hasDefaultSfixed32; }
-    }
-    public int DefaultSfixed32 {
-      get { return defaultSfixed32_; }
-    }
-
-    public const int DefaultSfixed64FieldNumber = 70;
-    private bool hasDefaultSfixed64;
-    private long defaultSfixed64_ = -50L;
-    public bool HasDefaultSfixed64 {
-      get { return hasDefaultSfixed64; }
-    }
-    public long DefaultSfixed64 {
-      get { return defaultSfixed64_; }
-    }
-
-    public const int DefaultFloatFieldNumber = 71;
-    private bool hasDefaultFloat;
-    private float defaultFloat_ = 51.5F;
-    public bool HasDefaultFloat {
-      get { return hasDefaultFloat; }
-    }
-    public float DefaultFloat {
-      get { return defaultFloat_; }
-    }
-
-    public const int DefaultDoubleFieldNumber = 72;
-    private bool hasDefaultDouble;
-    private double defaultDouble_ = 52000D;
-    public bool HasDefaultDouble {
-      get { return hasDefaultDouble; }
-    }
-    public double DefaultDouble {
-      get { return defaultDouble_; }
-    }
-
-    public const int DefaultBoolFieldNumber = 73;
-    private bool hasDefaultBool;
-    private bool defaultBool_ = true;
-    public bool HasDefaultBool {
-      get { return hasDefaultBool; }
-    }
-    public bool DefaultBool {
-      get { return defaultBool_; }
-    }
-
-    public const int DefaultStringFieldNumber = 74;
-    private bool hasDefaultString;
-    private string defaultString_ = "hello";
-    public bool HasDefaultString {
-      get { return hasDefaultString; }
-    }
-    public string DefaultString {
-      get { return defaultString_; }
-    }
-
-    public const int DefaultBytesFieldNumber = 75;
-    private bool hasDefaultBytes;
-    private pb::ByteString defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor.Fields[65].DefaultValue;
-    public bool HasDefaultBytes {
-      get { return hasDefaultBytes; }
-    }
-    public pb::ByteString DefaultBytes {
-      get { return defaultBytes_; }
-    }
-
-    public const int DefaultNestedEnumFieldNumber = 81;
-    private bool hasDefaultNestedEnum;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.BAR;
-    public bool HasDefaultNestedEnum {
-      get { return hasDefaultNestedEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum DefaultNestedEnum {
-      get { return defaultNestedEnum_; }
-    }
-
-    public const int DefaultForeignEnumFieldNumber = 82;
-    private bool hasDefaultForeignEnum;
-    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_BAR;
-    public bool HasDefaultForeignEnum {
-      get { return hasDefaultForeignEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum DefaultForeignEnum {
-      get { return defaultForeignEnum_; }
-    }
-
-    public const int DefaultImportEnumFieldNumber = 83;
-    private bool hasDefaultImportEnum;
-    private global::Google.ProtocolBuffers.TestProtos.ImportEnum defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_BAR;
-    public bool HasDefaultImportEnum {
-      get { return hasDefaultImportEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ImportEnum DefaultImportEnum {
-      get { return defaultImportEnum_; }
-    }
-
-    public const int DefaultStringPieceFieldNumber = 84;
-    private bool hasDefaultStringPiece;
-    private string defaultStringPiece_ = "abc";
-    public bool HasDefaultStringPiece {
-      get { return hasDefaultStringPiece; }
-    }
-    public string DefaultStringPiece {
-      get { return defaultStringPiece_; }
-    }
-
-    public const int DefaultCordFieldNumber = 85;
-    private bool hasDefaultCord;
-    private string defaultCord_ = "123";
-    public bool HasDefaultCord {
-      get { return hasDefaultCord; }
-    }
-    public string DefaultCord {
-      get { return defaultCord_; }
-    }
-
-    public const int OneofUint32FieldNumber = 111;
-    public bool HasOneofUint32 {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofUint32; }
-    }
-    public uint OneofUint32 {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofUint32 ? (uint) oneofField_ : 0; }
-    }
-
-    public const int OneofNestedMessageFieldNumber = 112;
-    public bool HasOneofNestedMessage {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OneofNestedMessage {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage ? (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage) oneofField_ : global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public const int OneofStringFieldNumber = 113;
-    public bool HasOneofString {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofString; }
-    }
-    public string OneofString {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofString ? (string) oneofField_ : ""; }
-    }
-
-    public const int OneofBytesFieldNumber = 114;
-    public bool HasOneofBytes {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofBytes; }
-    }
-    public pb::ByteString OneofBytes {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofBytes ? (pb::ByteString) oneofField_ : pb::ByteString.Empty; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testAllTypesFieldNames;
-      if (hasOptionalInt32) {
-        output.WriteInt32(1, field_names[35], OptionalInt32);
-      }
-      if (hasOptionalInt64) {
-        output.WriteInt64(2, field_names[36], OptionalInt64);
-      }
-      if (hasOptionalUint32) {
-        output.WriteUInt32(3, field_names[47], OptionalUint32);
-      }
-      if (hasOptionalUint64) {
-        output.WriteUInt64(4, field_names[48], OptionalUint64);
-      }
-      if (hasOptionalSint32) {
-        output.WriteSInt32(5, field_names[43], OptionalSint32);
-      }
-      if (hasOptionalSint64) {
-        output.WriteSInt64(6, field_names[44], OptionalSint64);
-      }
-      if (hasOptionalFixed32) {
-        output.WriteFixed32(7, field_names[28], OptionalFixed32);
-      }
-      if (hasOptionalFixed64) {
-        output.WriteFixed64(8, field_names[29], OptionalFixed64);
-      }
-      if (hasOptionalSfixed32) {
-        output.WriteSFixed32(9, field_names[41], OptionalSfixed32);
-      }
-      if (hasOptionalSfixed64) {
-        output.WriteSFixed64(10, field_names[42], OptionalSfixed64);
-      }
-      if (hasOptionalFloat) {
-        output.WriteFloat(11, field_names[30], OptionalFloat);
-      }
-      if (hasOptionalDouble) {
-        output.WriteDouble(12, field_names[27], OptionalDouble);
-      }
-      if (hasOptionalBool) {
-        output.WriteBool(13, field_names[24], OptionalBool);
-      }
-      if (hasOptionalString) {
-        output.WriteString(14, field_names[45], OptionalString);
-      }
-      if (hasOptionalBytes) {
-        output.WriteBytes(15, field_names[25], OptionalBytes);
-      }
-      if (hasOptionalGroup) {
-        output.WriteGroup(16, field_names[49], OptionalGroup);
-      }
-      if (hasOptionalNestedMessage) {
-        output.WriteMessage(18, field_names[39], OptionalNestedMessage);
-      }
-      if (hasOptionalForeignMessage) {
-        output.WriteMessage(19, field_names[32], OptionalForeignMessage);
-      }
-      if (hasOptionalImportMessage) {
-        output.WriteMessage(20, field_names[34], OptionalImportMessage);
-      }
-      if (hasOptionalNestedEnum) {
-        output.WriteEnum(21, field_names[38], (int) OptionalNestedEnum, OptionalNestedEnum);
-      }
-      if (hasOptionalForeignEnum) {
-        output.WriteEnum(22, field_names[31], (int) OptionalForeignEnum, OptionalForeignEnum);
-      }
-      if (hasOptionalImportEnum) {
-        output.WriteEnum(23, field_names[33], (int) OptionalImportEnum, OptionalImportEnum);
-      }
-      if (hasOptionalStringPiece) {
-        output.WriteString(24, field_names[46], OptionalStringPiece);
-      }
-      if (hasOptionalCord) {
-        output.WriteString(25, field_names[26], OptionalCord);
-      }
-      if (hasOptionalPublicImportMessage) {
-        output.WriteMessage(26, field_names[40], OptionalPublicImportMessage);
-      }
-      if (hasOptionalLazyMessage) {
-        output.WriteMessage(27, field_names[37], OptionalLazyMessage);
-      }
-      if (repeatedInt32_.Count > 0) {
-        output.WriteInt32Array(31, field_names[61], repeatedInt32_);
-      }
-      if (repeatedInt64_.Count > 0) {
-        output.WriteInt64Array(32, field_names[62], repeatedInt64_);
-      }
-      if (repeatedUint32_.Count > 0) {
-        output.WriteUInt32Array(33, field_names[72], repeatedUint32_);
-      }
-      if (repeatedUint64_.Count > 0) {
-        output.WriteUInt64Array(34, field_names[73], repeatedUint64_);
-      }
-      if (repeatedSint32_.Count > 0) {
-        output.WriteSInt32Array(35, field_names[68], repeatedSint32_);
-      }
-      if (repeatedSint64_.Count > 0) {
-        output.WriteSInt64Array(36, field_names[69], repeatedSint64_);
-      }
-      if (repeatedFixed32_.Count > 0) {
-        output.WriteFixed32Array(37, field_names[54], repeatedFixed32_);
-      }
-      if (repeatedFixed64_.Count > 0) {
-        output.WriteFixed64Array(38, field_names[55], repeatedFixed64_);
-      }
-      if (repeatedSfixed32_.Count > 0) {
-        output.WriteSFixed32Array(39, field_names[66], repeatedSfixed32_);
-      }
-      if (repeatedSfixed64_.Count > 0) {
-        output.WriteSFixed64Array(40, field_names[67], repeatedSfixed64_);
-      }
-      if (repeatedFloat_.Count > 0) {
-        output.WriteFloatArray(41, field_names[56], repeatedFloat_);
-      }
-      if (repeatedDouble_.Count > 0) {
-        output.WriteDoubleArray(42, field_names[53], repeatedDouble_);
-      }
-      if (repeatedBool_.Count > 0) {
-        output.WriteBoolArray(43, field_names[50], repeatedBool_);
-      }
-      if (repeatedString_.Count > 0) {
-        output.WriteStringArray(44, field_names[70], repeatedString_);
-      }
-      if (repeatedBytes_.Count > 0) {
-        output.WriteBytesArray(45, field_names[51], repeatedBytes_);
-      }
-      if (repeatedGroup_.Count > 0) {
-        output.WriteGroupArray(46, field_names[74], repeatedGroup_);
-      }
-      if (repeatedNestedMessage_.Count > 0) {
-        output.WriteMessageArray(48, field_names[65], repeatedNestedMessage_);
-      }
-      if (repeatedForeignMessage_.Count > 0) {
-        output.WriteMessageArray(49, field_names[58], repeatedForeignMessage_);
-      }
-      if (repeatedImportMessage_.Count > 0) {
-        output.WriteMessageArray(50, field_names[60], repeatedImportMessage_);
-      }
-      if (repeatedNestedEnum_.Count > 0) {
-        output.WriteEnumArray(51, field_names[64], repeatedNestedEnum_);
-      }
-      if (repeatedForeignEnum_.Count > 0) {
-        output.WriteEnumArray(52, field_names[57], repeatedForeignEnum_);
-      }
-      if (repeatedImportEnum_.Count > 0) {
-        output.WriteEnumArray(53, field_names[59], repeatedImportEnum_);
-      }
-      if (repeatedStringPiece_.Count > 0) {
-        output.WriteStringArray(54, field_names[71], repeatedStringPiece_);
-      }
-      if (repeatedCord_.Count > 0) {
-        output.WriteStringArray(55, field_names[52], repeatedCord_);
-      }
-      if (repeatedLazyMessage_.Count > 0) {
-        output.WriteMessageArray(57, field_names[63], repeatedLazyMessage_);
-      }
-      if (hasDefaultInt32) {
-        output.WriteInt32(61, field_names[9], DefaultInt32);
-      }
-      if (hasDefaultInt64) {
-        output.WriteInt64(62, field_names[10], DefaultInt64);
-      }
-      if (hasDefaultUint32) {
-        output.WriteUInt32(63, field_names[18], DefaultUint32);
-      }
-      if (hasDefaultUint64) {
-        output.WriteUInt64(64, field_names[19], DefaultUint64);
-      }
-      if (hasDefaultSint32) {
-        output.WriteSInt32(65, field_names[14], DefaultSint32);
-      }
-      if (hasDefaultSint64) {
-        output.WriteSInt64(66, field_names[15], DefaultSint64);
-      }
-      if (hasDefaultFixed32) {
-        output.WriteFixed32(67, field_names[4], DefaultFixed32);
-      }
-      if (hasDefaultFixed64) {
-        output.WriteFixed64(68, field_names[5], DefaultFixed64);
-      }
-      if (hasDefaultSfixed32) {
-        output.WriteSFixed32(69, field_names[12], DefaultSfixed32);
-      }
-      if (hasDefaultSfixed64) {
-        output.WriteSFixed64(70, field_names[13], DefaultSfixed64);
-      }
-      if (hasDefaultFloat) {
-        output.WriteFloat(71, field_names[6], DefaultFloat);
-      }
-      if (hasDefaultDouble) {
-        output.WriteDouble(72, field_names[3], DefaultDouble);
-      }
-      if (hasDefaultBool) {
-        output.WriteBool(73, field_names[0], DefaultBool);
-      }
-      if (hasDefaultString) {
-        output.WriteString(74, field_names[16], DefaultString);
-      }
-      if (hasDefaultBytes) {
-        output.WriteBytes(75, field_names[1], DefaultBytes);
-      }
-      if (hasDefaultNestedEnum) {
-        output.WriteEnum(81, field_names[11], (int) DefaultNestedEnum, DefaultNestedEnum);
-      }
-      if (hasDefaultForeignEnum) {
-        output.WriteEnum(82, field_names[7], (int) DefaultForeignEnum, DefaultForeignEnum);
-      }
-      if (hasDefaultImportEnum) {
-        output.WriteEnum(83, field_names[8], (int) DefaultImportEnum, DefaultImportEnum);
-      }
-      if (hasDefaultStringPiece) {
-        output.WriteString(84, field_names[17], DefaultStringPiece);
-      }
-      if (hasDefaultCord) {
-        output.WriteString(85, field_names[2], DefaultCord);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
-        output.WriteUInt32(111, field_names[23], OneofUint32);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
-        output.WriteMessage(112, field_names[21], OneofNestedMessage);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
-        output.WriteString(113, field_names[22], OneofString);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
-        output.WriteBytes(114, field_names[20], OneofBytes);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasOptionalInt32) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, OptionalInt32);
-      }
-      if (hasOptionalInt64) {
-        size += pb::CodedOutputStream.ComputeInt64Size(2, OptionalInt64);
-      }
-      if (hasOptionalUint32) {
-        size += pb::CodedOutputStream.ComputeUInt32Size(3, OptionalUint32);
-      }
-      if (hasOptionalUint64) {
-        size += pb::CodedOutputStream.ComputeUInt64Size(4, OptionalUint64);
-      }
-      if (hasOptionalSint32) {
-        size += pb::CodedOutputStream.ComputeSInt32Size(5, OptionalSint32);
-      }
-      if (hasOptionalSint64) {
-        size += pb::CodedOutputStream.ComputeSInt64Size(6, OptionalSint64);
-      }
-      if (hasOptionalFixed32) {
-        size += pb::CodedOutputStream.ComputeFixed32Size(7, OptionalFixed32);
-      }
-      if (hasOptionalFixed64) {
-        size += pb::CodedOutputStream.ComputeFixed64Size(8, OptionalFixed64);
-      }
-      if (hasOptionalSfixed32) {
-        size += pb::CodedOutputStream.ComputeSFixed32Size(9, OptionalSfixed32);
-      }
-      if (hasOptionalSfixed64) {
-        size += pb::CodedOutputStream.ComputeSFixed64Size(10, OptionalSfixed64);
-      }
-      if (hasOptionalFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(11, OptionalFloat);
-      }
-      if (hasOptionalDouble) {
-        size += pb::CodedOutputStream.ComputeDoubleSize(12, OptionalDouble);
-      }
-      if (hasOptionalBool) {
-        size += pb::CodedOutputStream.ComputeBoolSize(13, OptionalBool);
-      }
-      if (hasOptionalString) {
-        size += pb::CodedOutputStream.ComputeStringSize(14, OptionalString);
-      }
-      if (hasOptionalBytes) {
-        size += pb::CodedOutputStream.ComputeBytesSize(15, OptionalBytes);
-      }
-      if (hasOptionalGroup) {
-        size += pb::CodedOutputStream.ComputeGroupSize(16, OptionalGroup);
-      }
-      if (hasOptionalNestedMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(18, OptionalNestedMessage);
-      }
-      if (hasOptionalForeignMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(19, OptionalForeignMessage);
-      }
-      if (hasOptionalImportMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(20, OptionalImportMessage);
-      }
-      if (hasOptionalNestedEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(21, (int) OptionalNestedEnum);
-      }
-      if (hasOptionalForeignEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(22, (int) OptionalForeignEnum);
-      }
-      if (hasOptionalImportEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(23, (int) OptionalImportEnum);
-      }
-      if (hasOptionalStringPiece) {
-        size += pb::CodedOutputStream.ComputeStringSize(24, OptionalStringPiece);
-      }
-      if (hasOptionalCord) {
-        size += pb::CodedOutputStream.ComputeStringSize(25, OptionalCord);
-      }
-      if (hasOptionalPublicImportMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(26, OptionalPublicImportMessage);
-      }
-      if (hasOptionalLazyMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(27, OptionalLazyMessage);
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in RepeatedInt32List) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedInt32_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in RepeatedInt64List) {
-          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedInt64_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (uint element in RepeatedUint32List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedUint32_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (ulong element in RepeatedUint64List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedUint64_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in RepeatedSint32List) {
-          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedSint32_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in RepeatedSint64List) {
-          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedSint64_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * repeatedFixed32_.Count;
-        size += dataSize;
-        size += 2 * repeatedFixed32_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * repeatedFixed64_.Count;
-        size += dataSize;
-        size += 2 * repeatedFixed64_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * repeatedSfixed32_.Count;
-        size += dataSize;
-        size += 2 * repeatedSfixed32_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * repeatedSfixed64_.Count;
-        size += dataSize;
-        size += 2 * repeatedSfixed64_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * repeatedFloat_.Count;
-        size += dataSize;
-        size += 2 * repeatedFloat_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * repeatedDouble_.Count;
-        size += dataSize;
-        size += 2 * repeatedDouble_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 1 * repeatedBool_.Count;
-        size += dataSize;
-        size += 2 * repeatedBool_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedStringList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedString_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (pb::ByteString element in RepeatedBytesList) {
-          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedBytes_.Count;
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup element in RepeatedGroupList) {
-        size += pb::CodedOutputStream.ComputeGroupSize(46, element);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage element in RepeatedNestedMessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(48, element);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in RepeatedForeignMessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(49, element);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.ImportMessage element in RepeatedImportMessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(50, element);
-      }
-      {
-        int dataSize = 0;
-        if (repeatedNestedEnum_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum element in repeatedNestedEnum_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 2 * repeatedNestedEnum_.Count;
-        }
-      }
-      {
-        int dataSize = 0;
-        if (repeatedForeignEnum_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in repeatedForeignEnum_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 2 * repeatedForeignEnum_.Count;
-        }
-      }
-      {
-        int dataSize = 0;
-        if (repeatedImportEnum_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.ImportEnum element in repeatedImportEnum_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 2 * repeatedImportEnum_.Count;
-        }
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedStringPieceList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedStringPiece_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedCordList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedCord_.Count;
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage element in RepeatedLazyMessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(57, element);
-      }
-      if (hasDefaultInt32) {
-        size += pb::CodedOutputStream.ComputeInt32Size(61, DefaultInt32);
-      }
-      if (hasDefaultInt64) {
-        size += pb::CodedOutputStream.ComputeInt64Size(62, DefaultInt64);
-      }
-      if (hasDefaultUint32) {
-        size += pb::CodedOutputStream.ComputeUInt32Size(63, DefaultUint32);
-      }
-      if (hasDefaultUint64) {
-        size += pb::CodedOutputStream.ComputeUInt64Size(64, DefaultUint64);
-      }
-      if (hasDefaultSint32) {
-        size += pb::CodedOutputStream.ComputeSInt32Size(65, DefaultSint32);
-      }
-      if (hasDefaultSint64) {
-        size += pb::CodedOutputStream.ComputeSInt64Size(66, DefaultSint64);
-      }
-      if (hasDefaultFixed32) {
-        size += pb::CodedOutputStream.ComputeFixed32Size(67, DefaultFixed32);
-      }
-      if (hasDefaultFixed64) {
-        size += pb::CodedOutputStream.ComputeFixed64Size(68, DefaultFixed64);
-      }
-      if (hasDefaultSfixed32) {
-        size += pb::CodedOutputStream.ComputeSFixed32Size(69, DefaultSfixed32);
-      }
-      if (hasDefaultSfixed64) {
-        size += pb::CodedOutputStream.ComputeSFixed64Size(70, DefaultSfixed64);
-      }
-      if (hasDefaultFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(71, DefaultFloat);
-      }
-      if (hasDefaultDouble) {
-        size += pb::CodedOutputStream.ComputeDoubleSize(72, DefaultDouble);
-      }
-      if (hasDefaultBool) {
-        size += pb::CodedOutputStream.ComputeBoolSize(73, DefaultBool);
-      }
-      if (hasDefaultString) {
-        size += pb::CodedOutputStream.ComputeStringSize(74, DefaultString);
-      }
-      if (hasDefaultBytes) {
-        size += pb::CodedOutputStream.ComputeBytesSize(75, DefaultBytes);
-      }
-      if (hasDefaultNestedEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(81, (int) DefaultNestedEnum);
-      }
-      if (hasDefaultForeignEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(82, (int) DefaultForeignEnum);
-      }
-      if (hasDefaultImportEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(83, (int) DefaultImportEnum);
-      }
-      if (hasDefaultStringPiece) {
-        size += pb::CodedOutputStream.ComputeStringSize(84, DefaultStringPiece);
-      }
-      if (hasDefaultCord) {
-        size += pb::CodedOutputStream.ComputeStringSize(85, DefaultCord);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
-        size += pb::CodedOutputStream.ComputeUInt32Size(111, OneofUint32);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(112, OneofNestedMessage);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
-        size += pb::CodedOutputStream.ComputeStringSize(113, OneofString);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
-        size += pb::CodedOutputStream.ComputeBytesSize(114, OneofBytes);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestAllTypes ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestAllTypes MakeReadOnly() {
-      repeatedInt32_.MakeReadOnly();
-      repeatedInt64_.MakeReadOnly();
-      repeatedUint32_.MakeReadOnly();
-      repeatedUint64_.MakeReadOnly();
-      repeatedSint32_.MakeReadOnly();
-      repeatedSint64_.MakeReadOnly();
-      repeatedFixed32_.MakeReadOnly();
-      repeatedFixed64_.MakeReadOnly();
-      repeatedSfixed32_.MakeReadOnly();
-      repeatedSfixed64_.MakeReadOnly();
-      repeatedFloat_.MakeReadOnly();
-      repeatedDouble_.MakeReadOnly();
-      repeatedBool_.MakeReadOnly();
-      repeatedString_.MakeReadOnly();
-      repeatedBytes_.MakeReadOnly();
-      repeatedGroup_.MakeReadOnly();
-      repeatedNestedMessage_.MakeReadOnly();
-      repeatedForeignMessage_.MakeReadOnly();
-      repeatedImportMessage_.MakeReadOnly();
-      repeatedNestedEnum_.MakeReadOnly();
-      repeatedForeignEnum_.MakeReadOnly();
-      repeatedImportEnum_.MakeReadOnly();
-      repeatedStringPiece_.MakeReadOnly();
-      repeatedCord_.MakeReadOnly();
-      repeatedLazyMessage_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestAllTypes prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestAllTypes, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestAllTypes cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestAllTypes result;
-
-      private TestAllTypes PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestAllTypes original = result;
-          result = new TestAllTypes();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestAllTypes MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor; }
-      }
-
-      public override TestAllTypes DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-      }
-
-      public override TestAllTypes BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestAllTypes) {
-          return MergeFrom((TestAllTypes) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestAllTypes other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasOptionalInt32) {
-          OptionalInt32 = other.OptionalInt32;
-        }
-        if (other.HasOptionalInt64) {
-          OptionalInt64 = other.OptionalInt64;
-        }
-        if (other.HasOptionalUint32) {
-          OptionalUint32 = other.OptionalUint32;
-        }
-        if (other.HasOptionalUint64) {
-          OptionalUint64 = other.OptionalUint64;
-        }
-        if (other.HasOptionalSint32) {
-          OptionalSint32 = other.OptionalSint32;
-        }
-        if (other.HasOptionalSint64) {
-          OptionalSint64 = other.OptionalSint64;
-        }
-        if (other.HasOptionalFixed32) {
-          OptionalFixed32 = other.OptionalFixed32;
-        }
-        if (other.HasOptionalFixed64) {
-          OptionalFixed64 = other.OptionalFixed64;
-        }
-        if (other.HasOptionalSfixed32) {
-          OptionalSfixed32 = other.OptionalSfixed32;
-        }
-        if (other.HasOptionalSfixed64) {
-          OptionalSfixed64 = other.OptionalSfixed64;
-        }
-        if (other.HasOptionalFloat) {
-          OptionalFloat = other.OptionalFloat;
-        }
-        if (other.HasOptionalDouble) {
-          OptionalDouble = other.OptionalDouble;
-        }
-        if (other.HasOptionalBool) {
-          OptionalBool = other.OptionalBool;
-        }
-        if (other.HasOptionalString) {
-          OptionalString = other.OptionalString;
-        }
-        if (other.HasOptionalBytes) {
-          OptionalBytes = other.OptionalBytes;
-        }
-        if (other.HasOptionalGroup) {
-          MergeOptionalGroup(other.OptionalGroup);
-        }
-        if (other.HasOptionalNestedMessage) {
-          MergeOptionalNestedMessage(other.OptionalNestedMessage);
-        }
-        if (other.HasOptionalForeignMessage) {
-          MergeOptionalForeignMessage(other.OptionalForeignMessage);
-        }
-        if (other.HasOptionalImportMessage) {
-          MergeOptionalImportMessage(other.OptionalImportMessage);
-        }
-        if (other.HasOptionalNestedEnum) {
-          OptionalNestedEnum = other.OptionalNestedEnum;
-        }
-        if (other.HasOptionalForeignEnum) {
-          OptionalForeignEnum = other.OptionalForeignEnum;
-        }
-        if (other.HasOptionalImportEnum) {
-          OptionalImportEnum = other.OptionalImportEnum;
-        }
-        if (other.HasOptionalStringPiece) {
-          OptionalStringPiece = other.OptionalStringPiece;
-        }
-        if (other.HasOptionalCord) {
-          OptionalCord = other.OptionalCord;
-        }
-        if (other.HasOptionalPublicImportMessage) {
-          MergeOptionalPublicImportMessage(other.OptionalPublicImportMessage);
-        }
-        if (other.HasOptionalLazyMessage) {
-          MergeOptionalLazyMessage(other.OptionalLazyMessage);
-        }
-        if (other.repeatedInt32_.Count != 0) {
-          result.repeatedInt32_.Add(other.repeatedInt32_);
-        }
-        if (other.repeatedInt64_.Count != 0) {
-          result.repeatedInt64_.Add(other.repeatedInt64_);
-        }
-        if (other.repeatedUint32_.Count != 0) {
-          result.repeatedUint32_.Add(other.repeatedUint32_);
-        }
-        if (other.repeatedUint64_.Count != 0) {
-          result.repeatedUint64_.Add(other.repeatedUint64_);
-        }
-        if (other.repeatedSint32_.Count != 0) {
-          result.repeatedSint32_.Add(other.repeatedSint32_);
-        }
-        if (other.repeatedSint64_.Count != 0) {
-          result.repeatedSint64_.Add(other.repeatedSint64_);
-        }
-        if (other.repeatedFixed32_.Count != 0) {
-          result.repeatedFixed32_.Add(other.repeatedFixed32_);
-        }
-        if (other.repeatedFixed64_.Count != 0) {
-          result.repeatedFixed64_.Add(other.repeatedFixed64_);
-        }
-        if (other.repeatedSfixed32_.Count != 0) {
-          result.repeatedSfixed32_.Add(other.repeatedSfixed32_);
-        }
-        if (other.repeatedSfixed64_.Count != 0) {
-          result.repeatedSfixed64_.Add(other.repeatedSfixed64_);
-        }
-        if (other.repeatedFloat_.Count != 0) {
-          result.repeatedFloat_.Add(other.repeatedFloat_);
-        }
-        if (other.repeatedDouble_.Count != 0) {
-          result.repeatedDouble_.Add(other.repeatedDouble_);
-        }
-        if (other.repeatedBool_.Count != 0) {
-          result.repeatedBool_.Add(other.repeatedBool_);
-        }
-        if (other.repeatedString_.Count != 0) {
-          result.repeatedString_.Add(other.repeatedString_);
-        }
-        if (other.repeatedBytes_.Count != 0) {
-          result.repeatedBytes_.Add(other.repeatedBytes_);
-        }
-        if (other.repeatedGroup_.Count != 0) {
-          result.repeatedGroup_.Add(other.repeatedGroup_);
-        }
-        if (other.repeatedNestedMessage_.Count != 0) {
-          result.repeatedNestedMessage_.Add(other.repeatedNestedMessage_);
-        }
-        if (other.repeatedForeignMessage_.Count != 0) {
-          result.repeatedForeignMessage_.Add(other.repeatedForeignMessage_);
-        }
-        if (other.repeatedImportMessage_.Count != 0) {
-          result.repeatedImportMessage_.Add(other.repeatedImportMessage_);
-        }
-        if (other.repeatedNestedEnum_.Count != 0) {
-          result.repeatedNestedEnum_.Add(other.repeatedNestedEnum_);
-        }
-        if (other.repeatedForeignEnum_.Count != 0) {
-          result.repeatedForeignEnum_.Add(other.repeatedForeignEnum_);
-        }
-        if (other.repeatedImportEnum_.Count != 0) {
-          result.repeatedImportEnum_.Add(other.repeatedImportEnum_);
-        }
-        if (other.repeatedStringPiece_.Count != 0) {
-          result.repeatedStringPiece_.Add(other.repeatedStringPiece_);
-        }
-        if (other.repeatedCord_.Count != 0) {
-          result.repeatedCord_.Add(other.repeatedCord_);
-        }
-        if (other.repeatedLazyMessage_.Count != 0) {
-          result.repeatedLazyMessage_.Add(other.repeatedLazyMessage_);
-        }
-        if (other.HasDefaultInt32) {
-          DefaultInt32 = other.DefaultInt32;
-        }
-        if (other.HasDefaultInt64) {
-          DefaultInt64 = other.DefaultInt64;
-        }
-        if (other.HasDefaultUint32) {
-          DefaultUint32 = other.DefaultUint32;
-        }
-        if (other.HasDefaultUint64) {
-          DefaultUint64 = other.DefaultUint64;
-        }
-        if (other.HasDefaultSint32) {
-          DefaultSint32 = other.DefaultSint32;
-        }
-        if (other.HasDefaultSint64) {
-          DefaultSint64 = other.DefaultSint64;
-        }
-        if (other.HasDefaultFixed32) {
-          DefaultFixed32 = other.DefaultFixed32;
-        }
-        if (other.HasDefaultFixed64) {
-          DefaultFixed64 = other.DefaultFixed64;
-        }
-        if (other.HasDefaultSfixed32) {
-          DefaultSfixed32 = other.DefaultSfixed32;
-        }
-        if (other.HasDefaultSfixed64) {
-          DefaultSfixed64 = other.DefaultSfixed64;
-        }
-        if (other.HasDefaultFloat) {
-          DefaultFloat = other.DefaultFloat;
-        }
-        if (other.HasDefaultDouble) {
-          DefaultDouble = other.DefaultDouble;
-        }
-        if (other.HasDefaultBool) {
-          DefaultBool = other.DefaultBool;
-        }
-        if (other.HasDefaultString) {
-          DefaultString = other.DefaultString;
-        }
-        if (other.HasDefaultBytes) {
-          DefaultBytes = other.DefaultBytes;
-        }
-        if (other.HasDefaultNestedEnum) {
-          DefaultNestedEnum = other.DefaultNestedEnum;
-        }
-        if (other.HasDefaultForeignEnum) {
-          DefaultForeignEnum = other.DefaultForeignEnum;
-        }
-        if (other.HasDefaultImportEnum) {
-          DefaultImportEnum = other.DefaultImportEnum;
-        }
-        if (other.HasDefaultStringPiece) {
-          DefaultStringPiece = other.DefaultStringPiece;
-        }
-        if (other.HasDefaultCord) {
-          DefaultCord = other.DefaultCord;
-        }
-        switch (other.OneofFieldCase) {
-          case OneofFieldOneofCase.OneofUint32: {
-            SetOneofUint32(other.OneofUint32);
-            break;
-          }
-          case OneofFieldOneofCase.OneofNestedMessage: {
-            MergeOneofNestedMessage(other.OneofNestedMessage);
-            break;
-          }
-          case OneofFieldOneofCase.OneofString: {
-            SetOneofString(other.OneofString);
-            break;
-          }
-          case OneofFieldOneofCase.OneofBytes: {
-            SetOneofBytes(other.OneofBytes);
-            break;
-          }
-          case OneofFieldOneofCase.None: { break; }
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testAllTypesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testAllTypesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);
-              break;
-            }
-            case 16: {
-              result.hasOptionalInt64 = input.ReadInt64(ref result.optionalInt64_);
-              break;
-            }
-            case 24: {
-              result.hasOptionalUint32 = input.ReadUInt32(ref result.optionalUint32_);
-              break;
-            }
-            case 32: {
-              result.hasOptionalUint64 = input.ReadUInt64(ref result.optionalUint64_);
-              break;
-            }
-            case 40: {
-              result.hasOptionalSint32 = input.ReadSInt32(ref result.optionalSint32_);
-              break;
-            }
-            case 48: {
-              result.hasOptionalSint64 = input.ReadSInt64(ref result.optionalSint64_);
-              break;
-            }
-            case 61: {
-              result.hasOptionalFixed32 = input.ReadFixed32(ref result.optionalFixed32_);
-              break;
-            }
-            case 65: {
-              result.hasOptionalFixed64 = input.ReadFixed64(ref result.optionalFixed64_);
-              break;
-            }
-            case 77: {
-              result.hasOptionalSfixed32 = input.ReadSFixed32(ref result.optionalSfixed32_);
-              break;
-            }
-            case 81: {
-              result.hasOptionalSfixed64 = input.ReadSFixed64(ref result.optionalSfixed64_);
-              break;
-            }
-            case 93: {
-              result.hasOptionalFloat = input.ReadFloat(ref result.optionalFloat_);
-              break;
-            }
-            case 97: {
-              result.hasOptionalDouble = input.ReadDouble(ref result.optionalDouble_);
-              break;
-            }
-            case 104: {
-              result.hasOptionalBool = input.ReadBool(ref result.optionalBool_);
-              break;
-            }
-            case 114: {
-              result.hasOptionalString = input.ReadString(ref result.optionalString_);
-              break;
-            }
-            case 122: {
-              result.hasOptionalBytes = input.ReadBytes(ref result.optionalBytes_);
-              break;
-            }
-            case 131: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder();
-              if (result.hasOptionalGroup) {
-                subBuilder.MergeFrom(OptionalGroup);
-              }
-              input.ReadGroup(16, subBuilder, extensionRegistry);
-              OptionalGroup = subBuilder.BuildPartial();
-              break;
-            }
-            case 146: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();
-              if (result.hasOptionalNestedMessage) {
-                subBuilder.MergeFrom(OptionalNestedMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalNestedMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 154: {
-              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();
-              if (result.hasOptionalForeignMessage) {
-                subBuilder.MergeFrom(OptionalForeignMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalForeignMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 162: {
-              global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder();
-              if (result.hasOptionalImportMessage) {
-                subBuilder.MergeFrom(OptionalImportMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalImportMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 168: {
-              object unknown;
-              if(input.ReadEnum(ref result.optionalNestedEnum_, out unknown)) {
-                result.hasOptionalNestedEnum = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(21, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 176: {
-              object unknown;
-              if(input.ReadEnum(ref result.optionalForeignEnum_, out unknown)) {
-                result.hasOptionalForeignEnum = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(22, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 184: {
-              object unknown;
-              if(input.ReadEnum(ref result.optionalImportEnum_, out unknown)) {
-                result.hasOptionalImportEnum = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(23, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 194: {
-              result.hasOptionalStringPiece = input.ReadString(ref result.optionalStringPiece_);
-              break;
-            }
-            case 202: {
-              result.hasOptionalCord = input.ReadString(ref result.optionalCord_);
-              break;
-            }
-            case 210: {
-              global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.CreateBuilder();
-              if (result.hasOptionalPublicImportMessage) {
-                subBuilder.MergeFrom(OptionalPublicImportMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalPublicImportMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 218: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();
-              if (result.hasOptionalLazyMessage) {
-                subBuilder.MergeFrom(OptionalLazyMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalLazyMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 250:
-            case 248: {
-              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);
-              break;
-            }
-            case 258:
-            case 256: {
-              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);
-              break;
-            }
-            case 266:
-            case 264: {
-              input.ReadUInt32Array(tag, field_name, result.repeatedUint32_);
-              break;
-            }
-            case 274:
-            case 272: {
-              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);
-              break;
-            }
-            case 282:
-            case 280: {
-              input.ReadSInt32Array(tag, field_name, result.repeatedSint32_);
-              break;
-            }
-            case 290:
-            case 288: {
-              input.ReadSInt64Array(tag, field_name, result.repeatedSint64_);
-              break;
-            }
-            case 298:
-            case 301: {
-              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);
-              break;
-            }
-            case 306:
-            case 305: {
-              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);
-              break;
-            }
-            case 314:
-            case 317: {
-              input.ReadSFixed32Array(tag, field_name, result.repeatedSfixed32_);
-              break;
-            }
-            case 322:
-            case 321: {
-              input.ReadSFixed64Array(tag, field_name, result.repeatedSfixed64_);
-              break;
-            }
-            case 330:
-            case 333: {
-              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);
-              break;
-            }
-            case 338:
-            case 337: {
-              input.ReadDoubleArray(tag, field_name, result.repeatedDouble_);
-              break;
-            }
-            case 346:
-            case 344: {
-              input.ReadBoolArray(tag, field_name, result.repeatedBool_);
-              break;
-            }
-            case 354: {
-              input.ReadStringArray(tag, field_name, result.repeatedString_);
-              break;
-            }
-            case 362: {
-              input.ReadBytesArray(tag, field_name, result.repeatedBytes_);
-              break;
-            }
-            case 371: {
-              input.ReadGroupArray(tag, field_name, result.repeatedGroup_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 386: {
-              input.ReadMessageArray(tag, field_name, result.repeatedNestedMessage_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 394: {
-              input.ReadMessageArray(tag, field_name, result.repeatedForeignMessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 402: {
-              input.ReadMessageArray(tag, field_name, result.repeatedImportMessage_, global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 410:
-            case 408: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>(tag, field_name, result.repeatedNestedEnum_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(51, (ulong)(int)rawValue);
-              }
-              break;
-            }
-            case 418:
-            case 416: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.repeatedForeignEnum_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(52, (ulong)(int)rawValue);
-              }
-              break;
-            }
-            case 426:
-            case 424: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ImportEnum>(tag, field_name, result.repeatedImportEnum_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(53, (ulong)(int)rawValue);
-              }
-              break;
-            }
-            case 434: {
-              input.ReadStringArray(tag, field_name, result.repeatedStringPiece_);
-              break;
-            }
-            case 442: {
-              input.ReadStringArray(tag, field_name, result.repeatedCord_);
-              break;
-            }
-            case 458: {
-              input.ReadMessageArray(tag, field_name, result.repeatedLazyMessage_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 488: {
-              result.hasDefaultInt32 = input.ReadInt32(ref result.defaultInt32_);
-              break;
-            }
-            case 496: {
-              result.hasDefaultInt64 = input.ReadInt64(ref result.defaultInt64_);
-              break;
-            }
-            case 504: {
-              result.hasDefaultUint32 = input.ReadUInt32(ref result.defaultUint32_);
-              break;
-            }
-            case 512: {
-              result.hasDefaultUint64 = input.ReadUInt64(ref result.defaultUint64_);
-              break;
-            }
-            case 520: {
-              result.hasDefaultSint32 = input.ReadSInt32(ref result.defaultSint32_);
-              break;
-            }
-            case 528: {
-              result.hasDefaultSint64 = input.ReadSInt64(ref result.defaultSint64_);
-              break;
-            }
-            case 541: {
-              result.hasDefaultFixed32 = input.ReadFixed32(ref result.defaultFixed32_);
-              break;
-            }
-            case 545: {
-              result.hasDefaultFixed64 = input.ReadFixed64(ref result.defaultFixed64_);
-              break;
-            }
-            case 557: {
-              result.hasDefaultSfixed32 = input.ReadSFixed32(ref result.defaultSfixed32_);
-              break;
-            }
-            case 561: {
-              result.hasDefaultSfixed64 = input.ReadSFixed64(ref result.defaultSfixed64_);
-              break;
-            }
-            case 573: {
-              result.hasDefaultFloat = input.ReadFloat(ref result.defaultFloat_);
-              break;
-            }
-            case 577: {
-              result.hasDefaultDouble = input.ReadDouble(ref result.defaultDouble_);
-              break;
-            }
-            case 584: {
-              result.hasDefaultBool = input.ReadBool(ref result.defaultBool_);
-              break;
-            }
-            case 594: {
-              result.hasDefaultString = input.ReadString(ref result.defaultString_);
-              break;
-            }
-            case 602: {
-              result.hasDefaultBytes = input.ReadBytes(ref result.defaultBytes_);
-              break;
-            }
-            case 648: {
-              object unknown;
-              if(input.ReadEnum(ref result.defaultNestedEnum_, out unknown)) {
-                result.hasDefaultNestedEnum = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(81, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 656: {
-              object unknown;
-              if(input.ReadEnum(ref result.defaultForeignEnum_, out unknown)) {
-                result.hasDefaultForeignEnum = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(82, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 664: {
-              object unknown;
-              if(input.ReadEnum(ref result.defaultImportEnum_, out unknown)) {
-                result.hasDefaultImportEnum = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(83, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 674: {
-              result.hasDefaultStringPiece = input.ReadString(ref result.defaultStringPiece_);
-              break;
-            }
-            case 682: {
-              result.hasDefaultCord = input.ReadString(ref result.defaultCord_);
-              break;
-            }
-            case 888: {
-              uint value = 0;
-              if (input.ReadUInt32(ref value)) {
-                result.oneofField_ = value;
-                result.oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
-              }
-              break;
-            }
-            case 898: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();
-              if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
-                subBuilder.MergeFrom(OneofNestedMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              result.oneofField_ = subBuilder.BuildPartial();
-              result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
-              break;
-            }
-            case 906: {
-              string value = "";
-              if (input.ReadString(ref value)) {
-                result.oneofField_ = value;
-                result.oneofFieldCase_ = OneofFieldOneofCase.OneofString;
-              }
-              break;
-            }
-            case 914: {
-              pb::ByteString value = pb::ByteString.Empty;
-              if (input.ReadBytes(ref value)) {
-                result.oneofField_ = value;
-                result.oneofFieldCase_ = OneofFieldOneofCase.OneofBytes;
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasOptionalInt32 {
-        get { return result.hasOptionalInt32; }
-      }
-      public int OptionalInt32 {
-        get { return result.OptionalInt32; }
-        set { SetOptionalInt32(value); }
-      }
-      public Builder SetOptionalInt32(int value) {
-        PrepareBuilder();
-        result.hasOptionalInt32 = true;
-        result.optionalInt32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalInt32() {
-        PrepareBuilder();
-        result.hasOptionalInt32 = false;
-        result.optionalInt32_ = 0;
-        return this;
-      }
-
-      public bool HasOptionalInt64 {
-        get { return result.hasOptionalInt64; }
-      }
-      public long OptionalInt64 {
-        get { return result.OptionalInt64; }
-        set { SetOptionalInt64(value); }
-      }
-      public Builder SetOptionalInt64(long value) {
-        PrepareBuilder();
-        result.hasOptionalInt64 = true;
-        result.optionalInt64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalInt64() {
-        PrepareBuilder();
-        result.hasOptionalInt64 = false;
-        result.optionalInt64_ = 0L;
-        return this;
-      }
-
-      public bool HasOptionalUint32 {
-        get { return result.hasOptionalUint32; }
-      }
-      public uint OptionalUint32 {
-        get { return result.OptionalUint32; }
-        set { SetOptionalUint32(value); }
-      }
-      public Builder SetOptionalUint32(uint value) {
-        PrepareBuilder();
-        result.hasOptionalUint32 = true;
-        result.optionalUint32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalUint32() {
-        PrepareBuilder();
-        result.hasOptionalUint32 = false;
-        result.optionalUint32_ = 0;
-        return this;
-      }
-
-      public bool HasOptionalUint64 {
-        get { return result.hasOptionalUint64; }
-      }
-      public ulong OptionalUint64 {
-        get { return result.OptionalUint64; }
-        set { SetOptionalUint64(value); }
-      }
-      public Builder SetOptionalUint64(ulong value) {
-        PrepareBuilder();
-        result.hasOptionalUint64 = true;
-        result.optionalUint64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalUint64() {
-        PrepareBuilder();
-        result.hasOptionalUint64 = false;
-        result.optionalUint64_ = 0UL;
-        return this;
-      }
-
-      public bool HasOptionalSint32 {
-        get { return result.hasOptionalSint32; }
-      }
-      public int OptionalSint32 {
-        get { return result.OptionalSint32; }
-        set { SetOptionalSint32(value); }
-      }
-      public Builder SetOptionalSint32(int value) {
-        PrepareBuilder();
-        result.hasOptionalSint32 = true;
-        result.optionalSint32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalSint32() {
-        PrepareBuilder();
-        result.hasOptionalSint32 = false;
-        result.optionalSint32_ = 0;
-        return this;
-      }
-
-      public bool HasOptionalSint64 {
-        get { return result.hasOptionalSint64; }
-      }
-      public long OptionalSint64 {
-        get { return result.OptionalSint64; }
-        set { SetOptionalSint64(value); }
-      }
-      public Builder SetOptionalSint64(long value) {
-        PrepareBuilder();
-        result.hasOptionalSint64 = true;
-        result.optionalSint64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalSint64() {
-        PrepareBuilder();
-        result.hasOptionalSint64 = false;
-        result.optionalSint64_ = 0L;
-        return this;
-      }
-
-      public bool HasOptionalFixed32 {
-        get { return result.hasOptionalFixed32; }
-      }
-      public uint OptionalFixed32 {
-        get { return result.OptionalFixed32; }
-        set { SetOptionalFixed32(value); }
-      }
-      public Builder SetOptionalFixed32(uint value) {
-        PrepareBuilder();
-        result.hasOptionalFixed32 = true;
-        result.optionalFixed32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalFixed32() {
-        PrepareBuilder();
-        result.hasOptionalFixed32 = false;
-        result.optionalFixed32_ = 0;
-        return this;
-      }
-
-      public bool HasOptionalFixed64 {
-        get { return result.hasOptionalFixed64; }
-      }
-      public ulong OptionalFixed64 {
-        get { return result.OptionalFixed64; }
-        set { SetOptionalFixed64(value); }
-      }
-      public Builder SetOptionalFixed64(ulong value) {
-        PrepareBuilder();
-        result.hasOptionalFixed64 = true;
-        result.optionalFixed64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalFixed64() {
-        PrepareBuilder();
-        result.hasOptionalFixed64 = false;
-        result.optionalFixed64_ = 0UL;
-        return this;
-      }
-
-      public bool HasOptionalSfixed32 {
-        get { return result.hasOptionalSfixed32; }
-      }
-      public int OptionalSfixed32 {
-        get { return result.OptionalSfixed32; }
-        set { SetOptionalSfixed32(value); }
-      }
-      public Builder SetOptionalSfixed32(int value) {
-        PrepareBuilder();
-        result.hasOptionalSfixed32 = true;
-        result.optionalSfixed32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalSfixed32() {
-        PrepareBuilder();
-        result.hasOptionalSfixed32 = false;
-        result.optionalSfixed32_ = 0;
-        return this;
-      }
-
-      public bool HasOptionalSfixed64 {
-        get { return result.hasOptionalSfixed64; }
-      }
-      public long OptionalSfixed64 {
-        get { return result.OptionalSfixed64; }
-        set { SetOptionalSfixed64(value); }
-      }
-      public Builder SetOptionalSfixed64(long value) {
-        PrepareBuilder();
-        result.hasOptionalSfixed64 = true;
-        result.optionalSfixed64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalSfixed64() {
-        PrepareBuilder();
-        result.hasOptionalSfixed64 = false;
-        result.optionalSfixed64_ = 0L;
-        return this;
-      }
-
-      public bool HasOptionalFloat {
-        get { return result.hasOptionalFloat; }
-      }
-      public float OptionalFloat {
-        get { return result.OptionalFloat; }
-        set { SetOptionalFloat(value); }
-      }
-      public Builder SetOptionalFloat(float value) {
-        PrepareBuilder();
-        result.hasOptionalFloat = true;
-        result.optionalFloat_ = value;
-        return this;
-      }
-      public Builder ClearOptionalFloat() {
-        PrepareBuilder();
-        result.hasOptionalFloat = false;
-        result.optionalFloat_ = 0F;
-        return this;
-      }
-
-      public bool HasOptionalDouble {
-        get { return result.hasOptionalDouble; }
-      }
-      public double OptionalDouble {
-        get { return result.OptionalDouble; }
-        set { SetOptionalDouble(value); }
-      }
-      public Builder SetOptionalDouble(double value) {
-        PrepareBuilder();
-        result.hasOptionalDouble = true;
-        result.optionalDouble_ = value;
-        return this;
-      }
-      public Builder ClearOptionalDouble() {
-        PrepareBuilder();
-        result.hasOptionalDouble = false;
-        result.optionalDouble_ = 0D;
-        return this;
-      }
-
-      public bool HasOptionalBool {
-        get { return result.hasOptionalBool; }
-      }
-      public bool OptionalBool {
-        get { return result.OptionalBool; }
-        set { SetOptionalBool(value); }
-      }
-      public Builder SetOptionalBool(bool value) {
-        PrepareBuilder();
-        result.hasOptionalBool = true;
-        result.optionalBool_ = value;
-        return this;
-      }
-      public Builder ClearOptionalBool() {
-        PrepareBuilder();
-        result.hasOptionalBool = false;
-        result.optionalBool_ = false;
-        return this;
-      }
-
-      public bool HasOptionalString {
-        get { return result.hasOptionalString; }
-      }
-      public string OptionalString {
-        get { return result.OptionalString; }
-        set { SetOptionalString(value); }
-      }
-      public Builder SetOptionalString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalString = true;
-        result.optionalString_ = value;
-        return this;
-      }
-      public Builder ClearOptionalString() {
-        PrepareBuilder();
-        result.hasOptionalString = false;
-        result.optionalString_ = "";
-        return this;
-      }
-
-      public bool HasOptionalBytes {
-        get { return result.hasOptionalBytes; }
-      }
-      public pb::ByteString OptionalBytes {
-        get { return result.OptionalBytes; }
-        set { SetOptionalBytes(value); }
-      }
-      public Builder SetOptionalBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalBytes = true;
-        result.optionalBytes_ = value;
-        return this;
-      }
-      public Builder ClearOptionalBytes() {
-        PrepareBuilder();
-        result.hasOptionalBytes = false;
-        result.optionalBytes_ = pb::ByteString.Empty;
-        return this;
-      }
-
-      public bool HasOptionalGroup {
-       get { return result.hasOptionalGroup; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup OptionalGroup {
-        get { return result.OptionalGroup; }
-        set { SetOptionalGroup(value); }
-      }
-      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalGroup = true;
-        result.optionalGroup_ = value;
-        return this;
-      }
-      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalGroup = true;
-        result.optionalGroup_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalGroup &&
-            result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) {
-            result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalGroup_ = value;
-        }
-        result.hasOptionalGroup = true;
-        return this;
-      }
-      public Builder ClearOptionalGroup() {
-        PrepareBuilder();
-        result.hasOptionalGroup = false;
-        result.optionalGroup_ = null;
-        return this;
-      }
-
-      public bool HasOptionalNestedMessage {
-       get { return result.hasOptionalNestedMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalNestedMessage {
-        get { return result.OptionalNestedMessage; }
-        set { SetOptionalNestedMessage(value); }
-      }
-      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = true;
-        result.optionalNestedMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = true;
-        result.optionalNestedMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalNestedMessage &&
-            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {
-            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalNestedMessage_ = value;
-        }
-        result.hasOptionalNestedMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalNestedMessage() {
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = false;
-        result.optionalNestedMessage_ = null;
-        return this;
-      }
-
-      public bool HasOptionalForeignMessage {
-       get { return result.hasOptionalForeignMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage OptionalForeignMessage {
-        get { return result.OptionalForeignMessage; }
-        set { SetOptionalForeignMessage(value); }
-      }
-      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalForeignMessage = true;
-        result.optionalForeignMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalForeignMessage = true;
-        result.optionalForeignMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalForeignMessage &&
-            result.optionalForeignMessage_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {
-            result.optionalForeignMessage_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.optionalForeignMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalForeignMessage_ = value;
-        }
-        result.hasOptionalForeignMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalForeignMessage() {
-        PrepareBuilder();
-        result.hasOptionalForeignMessage = false;
-        result.optionalForeignMessage_ = null;
-        return this;
-      }
-
-      public bool HasOptionalImportMessage {
-       get { return result.hasOptionalImportMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ImportMessage OptionalImportMessage {
-        get { return result.OptionalImportMessage; }
-        set { SetOptionalImportMessage(value); }
-      }
-      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalImportMessage = true;
-        result.optionalImportMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalImportMessage = true;
-        result.optionalImportMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalImportMessage &&
-            result.optionalImportMessage_ != global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) {
-            result.optionalImportMessage_ = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder(result.optionalImportMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalImportMessage_ = value;
-        }
-        result.hasOptionalImportMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalImportMessage() {
-        PrepareBuilder();
-        result.hasOptionalImportMessage = false;
-        result.optionalImportMessage_ = null;
-        return this;
-      }
-
-      public bool HasOptionalNestedEnum {
-        get { return result.hasOptionalNestedEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum OptionalNestedEnum {
-        get { return result.OptionalNestedEnum; }
-        set { SetOptionalNestedEnum(value); }
-      }
-      public Builder SetOptionalNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.hasOptionalNestedEnum = true;
-        result.optionalNestedEnum_ = value;
-        return this;
-      }
-      public Builder ClearOptionalNestedEnum() {
-        PrepareBuilder();
-        result.hasOptionalNestedEnum = false;
-        result.optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.FOO;
-        return this;
-      }
-
-      public bool HasOptionalForeignEnum {
-        get { return result.hasOptionalForeignEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum OptionalForeignEnum {
-        get { return result.OptionalForeignEnum; }
-        set { SetOptionalForeignEnum(value); }
-      }
-      public Builder SetOptionalForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.hasOptionalForeignEnum = true;
-        result.optionalForeignEnum_ = value;
-        return this;
-      }
-      public Builder ClearOptionalForeignEnum() {
-        PrepareBuilder();
-        result.hasOptionalForeignEnum = false;
-        result.optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;
-        return this;
-      }
-
-      public bool HasOptionalImportEnum {
-        get { return result.hasOptionalImportEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ImportEnum OptionalImportEnum {
-        get { return result.OptionalImportEnum; }
-        set { SetOptionalImportEnum(value); }
-      }
-      public Builder SetOptionalImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {
-        PrepareBuilder();
-        result.hasOptionalImportEnum = true;
-        result.optionalImportEnum_ = value;
-        return this;
-      }
-      public Builder ClearOptionalImportEnum() {
-        PrepareBuilder();
-        result.hasOptionalImportEnum = false;
-        result.optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_FOO;
-        return this;
-      }
-
-      public bool HasOptionalStringPiece {
-        get { return result.hasOptionalStringPiece; }
-      }
-      public string OptionalStringPiece {
-        get { return result.OptionalStringPiece; }
-        set { SetOptionalStringPiece(value); }
-      }
-      public Builder SetOptionalStringPiece(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalStringPiece = true;
-        result.optionalStringPiece_ = value;
-        return this;
-      }
-      public Builder ClearOptionalStringPiece() {
-        PrepareBuilder();
-        result.hasOptionalStringPiece = false;
-        result.optionalStringPiece_ = "";
-        return this;
-      }
-
-      public bool HasOptionalCord {
-        get { return result.hasOptionalCord; }
-      }
-      public string OptionalCord {
-        get { return result.OptionalCord; }
-        set { SetOptionalCord(value); }
-      }
-      public Builder SetOptionalCord(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalCord = true;
-        result.optionalCord_ = value;
-        return this;
-      }
-      public Builder ClearOptionalCord() {
-        PrepareBuilder();
-        result.hasOptionalCord = false;
-        result.optionalCord_ = "";
-        return this;
-      }
-
-      public bool HasOptionalPublicImportMessage {
-       get { return result.hasOptionalPublicImportMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.PublicImportMessage OptionalPublicImportMessage {
-        get { return result.OptionalPublicImportMessage; }
-        set { SetOptionalPublicImportMessage(value); }
-      }
-      public Builder SetOptionalPublicImportMessage(global::Google.ProtocolBuffers.TestProtos.PublicImportMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalPublicImportMessage = true;
-        result.optionalPublicImportMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalPublicImportMessage(global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalPublicImportMessage = true;
-        result.optionalPublicImportMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalPublicImportMessage(global::Google.ProtocolBuffers.TestProtos.PublicImportMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalPublicImportMessage &&
-            result.optionalPublicImportMessage_ != global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.DefaultInstance) {
-            result.optionalPublicImportMessage_ = global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.CreateBuilder(result.optionalPublicImportMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalPublicImportMessage_ = value;
-        }
-        result.hasOptionalPublicImportMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalPublicImportMessage() {
-        PrepareBuilder();
-        result.hasOptionalPublicImportMessage = false;
-        result.optionalPublicImportMessage_ = null;
-        return this;
-      }
-
-      public bool HasOptionalLazyMessage {
-       get { return result.hasOptionalLazyMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalLazyMessage {
-        get { return result.OptionalLazyMessage; }
-        set { SetOptionalLazyMessage(value); }
-      }
-      public Builder SetOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalLazyMessage = true;
-        result.optionalLazyMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalLazyMessage = true;
-        result.optionalLazyMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalLazyMessage &&
-            result.optionalLazyMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {
-            result.optionalLazyMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.optionalLazyMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalLazyMessage_ = value;
-        }
-        result.hasOptionalLazyMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalLazyMessage() {
-        PrepareBuilder();
-        result.hasOptionalLazyMessage = false;
-        result.optionalLazyMessage_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> RepeatedInt32List {
-        get { return PrepareBuilder().repeatedInt32_; }
-      }
-      public int RepeatedInt32Count {
-        get { return result.RepeatedInt32Count; }
-      }
-      public int GetRepeatedInt32(int index) {
-        return result.GetRepeatedInt32(index);
-      }
-      public Builder SetRepeatedInt32(int index, int value) {
-        PrepareBuilder();
-        result.repeatedInt32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedInt32(int value) {
-        PrepareBuilder();
-        result.repeatedInt32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.repeatedInt32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedInt32() {
-        PrepareBuilder();
-        result.repeatedInt32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> RepeatedInt64List {
-        get { return PrepareBuilder().repeatedInt64_; }
-      }
-      public int RepeatedInt64Count {
-        get { return result.RepeatedInt64Count; }
-      }
-      public long GetRepeatedInt64(int index) {
-        return result.GetRepeatedInt64(index);
-      }
-      public Builder SetRepeatedInt64(int index, long value) {
-        PrepareBuilder();
-        result.repeatedInt64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedInt64(long value) {
-        PrepareBuilder();
-        result.repeatedInt64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.repeatedInt64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedInt64() {
-        PrepareBuilder();
-        result.repeatedInt64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<uint> RepeatedUint32List {
-        get { return PrepareBuilder().repeatedUint32_; }
-      }
-      public int RepeatedUint32Count {
-        get { return result.RepeatedUint32Count; }
-      }
-      public uint GetRepeatedUint32(int index) {
-        return result.GetRepeatedUint32(index);
-      }
-      public Builder SetRepeatedUint32(int index, uint value) {
-        PrepareBuilder();
-        result.repeatedUint32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedUint32(uint value) {
-        PrepareBuilder();
-        result.repeatedUint32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedUint32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.repeatedUint32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedUint32() {
-        PrepareBuilder();
-        result.repeatedUint32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> RepeatedUint64List {
-        get { return PrepareBuilder().repeatedUint64_; }
-      }
-      public int RepeatedUint64Count {
-        get { return result.RepeatedUint64Count; }
-      }
-      public ulong GetRepeatedUint64(int index) {
-        return result.GetRepeatedUint64(index);
-      }
-      public Builder SetRepeatedUint64(int index, ulong value) {
-        PrepareBuilder();
-        result.repeatedUint64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedUint64(ulong value) {
-        PrepareBuilder();
-        result.repeatedUint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.repeatedUint64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedUint64() {
-        PrepareBuilder();
-        result.repeatedUint64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> RepeatedSint32List {
-        get { return PrepareBuilder().repeatedSint32_; }
-      }
-      public int RepeatedSint32Count {
-        get { return result.RepeatedSint32Count; }
-      }
-      public int GetRepeatedSint32(int index) {
-        return result.GetRepeatedSint32(index);
-      }
-      public Builder SetRepeatedSint32(int index, int value) {
-        PrepareBuilder();
-        result.repeatedSint32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedSint32(int value) {
-        PrepareBuilder();
-        result.repeatedSint32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedSint32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.repeatedSint32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedSint32() {
-        PrepareBuilder();
-        result.repeatedSint32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> RepeatedSint64List {
-        get { return PrepareBuilder().repeatedSint64_; }
-      }
-      public int RepeatedSint64Count {
-        get { return result.RepeatedSint64Count; }
-      }
-      public long GetRepeatedSint64(int index) {
-        return result.GetRepeatedSint64(index);
-      }
-      public Builder SetRepeatedSint64(int index, long value) {
-        PrepareBuilder();
-        result.repeatedSint64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedSint64(long value) {
-        PrepareBuilder();
-        result.repeatedSint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedSint64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.repeatedSint64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedSint64() {
-        PrepareBuilder();
-        result.repeatedSint64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<uint> RepeatedFixed32List {
-        get { return PrepareBuilder().repeatedFixed32_; }
-      }
-      public int RepeatedFixed32Count {
-        get { return result.RepeatedFixed32Count; }
-      }
-      public uint GetRepeatedFixed32(int index) {
-        return result.GetRepeatedFixed32(index);
-      }
-      public Builder SetRepeatedFixed32(int index, uint value) {
-        PrepareBuilder();
-        result.repeatedFixed32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFixed32(uint value) {
-        PrepareBuilder();
-        result.repeatedFixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.repeatedFixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFixed32() {
-        PrepareBuilder();
-        result.repeatedFixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> RepeatedFixed64List {
-        get { return PrepareBuilder().repeatedFixed64_; }
-      }
-      public int RepeatedFixed64Count {
-        get { return result.RepeatedFixed64Count; }
-      }
-      public ulong GetRepeatedFixed64(int index) {
-        return result.GetRepeatedFixed64(index);
-      }
-      public Builder SetRepeatedFixed64(int index, ulong value) {
-        PrepareBuilder();
-        result.repeatedFixed64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFixed64(ulong value) {
-        PrepareBuilder();
-        result.repeatedFixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.repeatedFixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFixed64() {
-        PrepareBuilder();
-        result.repeatedFixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> RepeatedSfixed32List {
-        get { return PrepareBuilder().repeatedSfixed32_; }
-      }
-      public int RepeatedSfixed32Count {
-        get { return result.RepeatedSfixed32Count; }
-      }
-      public int GetRepeatedSfixed32(int index) {
-        return result.GetRepeatedSfixed32(index);
-      }
-      public Builder SetRepeatedSfixed32(int index, int value) {
-        PrepareBuilder();
-        result.repeatedSfixed32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedSfixed32(int value) {
-        PrepareBuilder();
-        result.repeatedSfixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedSfixed32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.repeatedSfixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedSfixed32() {
-        PrepareBuilder();
-        result.repeatedSfixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> RepeatedSfixed64List {
-        get { return PrepareBuilder().repeatedSfixed64_; }
-      }
-      public int RepeatedSfixed64Count {
-        get { return result.RepeatedSfixed64Count; }
-      }
-      public long GetRepeatedSfixed64(int index) {
-        return result.GetRepeatedSfixed64(index);
-      }
-      public Builder SetRepeatedSfixed64(int index, long value) {
-        PrepareBuilder();
-        result.repeatedSfixed64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedSfixed64(long value) {
-        PrepareBuilder();
-        result.repeatedSfixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedSfixed64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.repeatedSfixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedSfixed64() {
-        PrepareBuilder();
-        result.repeatedSfixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<float> RepeatedFloatList {
-        get { return PrepareBuilder().repeatedFloat_; }
-      }
-      public int RepeatedFloatCount {
-        get { return result.RepeatedFloatCount; }
-      }
-      public float GetRepeatedFloat(int index) {
-        return result.GetRepeatedFloat(index);
-      }
-      public Builder SetRepeatedFloat(int index, float value) {
-        PrepareBuilder();
-        result.repeatedFloat_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFloat(float value) {
-        PrepareBuilder();
-        result.repeatedFloat_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {
-        PrepareBuilder();
-        result.repeatedFloat_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFloat() {
-        PrepareBuilder();
-        result.repeatedFloat_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<double> RepeatedDoubleList {
-        get { return PrepareBuilder().repeatedDouble_; }
-      }
-      public int RepeatedDoubleCount {
-        get { return result.RepeatedDoubleCount; }
-      }
-      public double GetRepeatedDouble(int index) {
-        return result.GetRepeatedDouble(index);
-      }
-      public Builder SetRepeatedDouble(int index, double value) {
-        PrepareBuilder();
-        result.repeatedDouble_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedDouble(double value) {
-        PrepareBuilder();
-        result.repeatedDouble_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedDouble(scg::IEnumerable<double> values) {
-        PrepareBuilder();
-        result.repeatedDouble_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedDouble() {
-        PrepareBuilder();
-        result.repeatedDouble_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<bool> RepeatedBoolList {
-        get { return PrepareBuilder().repeatedBool_; }
-      }
-      public int RepeatedBoolCount {
-        get { return result.RepeatedBoolCount; }
-      }
-      public bool GetRepeatedBool(int index) {
-        return result.GetRepeatedBool(index);
-      }
-      public Builder SetRepeatedBool(int index, bool value) {
-        PrepareBuilder();
-        result.repeatedBool_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedBool(bool value) {
-        PrepareBuilder();
-        result.repeatedBool_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedBool(scg::IEnumerable<bool> values) {
-        PrepareBuilder();
-        result.repeatedBool_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedBool() {
-        PrepareBuilder();
-        result.repeatedBool_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedStringList {
-        get { return PrepareBuilder().repeatedString_; }
-      }
-      public int RepeatedStringCount {
-        get { return result.RepeatedStringCount; }
-      }
-      public string GetRepeatedString(int index) {
-        return result.GetRepeatedString(index);
-      }
-      public Builder SetRepeatedString(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedString_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedString_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedString(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedString_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedString() {
-        PrepareBuilder();
-        result.repeatedString_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<pb::ByteString> RepeatedBytesList {
-        get { return PrepareBuilder().repeatedBytes_; }
-      }
-      public int RepeatedBytesCount {
-        get { return result.RepeatedBytesCount; }
-      }
-      public pb::ByteString GetRepeatedBytes(int index) {
-        return result.GetRepeatedBytes(index);
-      }
-      public Builder SetRepeatedBytes(int index, pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedBytes_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedBytes_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedBytes(scg::IEnumerable<pb::ByteString> values) {
-        PrepareBuilder();
-        result.repeatedBytes_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedBytes() {
-        PrepareBuilder();
-        result.repeatedBytes_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> RepeatedGroupList {
-        get { return PrepareBuilder().repeatedGroup_; }
-      }
-      public int RepeatedGroupCount {
-        get { return result.RepeatedGroupCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup GetRepeatedGroup(int index) {
-        return result.GetRepeatedGroup(index);
-      }
-      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedGroup_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedGroup_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedGroup_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedGroup_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedGroup(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> values) {
-        PrepareBuilder();
-        result.repeatedGroup_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedGroup() {
-        PrepareBuilder();
-        result.repeatedGroup_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {
-        get { return PrepareBuilder().repeatedNestedMessage_; }
-      }
-      public int RepeatedNestedMessageCount {
-        get { return result.RepeatedNestedMessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {
-        return result.GetRepeatedNestedMessage(index);
-      }
-      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedNestedMessage_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedNestedMessage_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedNestedMessage_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedNestedMessage_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedNestedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> values) {
-        PrepareBuilder();
-        result.repeatedNestedMessage_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedNestedMessage() {
-        PrepareBuilder();
-        result.repeatedNestedMessage_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedForeignMessageList {
-        get { return PrepareBuilder().repeatedForeignMessage_; }
-      }
-      public int RepeatedForeignMessageCount {
-        get { return result.RepeatedForeignMessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedForeignMessage(int index) {
-        return result.GetRepeatedForeignMessage(index);
-      }
-      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedForeignMessage_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedForeignMessage_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedForeignMessage_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedForeignMessage_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedForeignMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {
-        PrepareBuilder();
-        result.repeatedForeignMessage_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedForeignMessage() {
-        PrepareBuilder();
-        result.repeatedForeignMessage_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> RepeatedImportMessageList {
-        get { return PrepareBuilder().repeatedImportMessage_; }
-      }
-      public int RepeatedImportMessageCount {
-        get { return result.RepeatedImportMessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ImportMessage GetRepeatedImportMessage(int index) {
-        return result.GetRepeatedImportMessage(index);
-      }
-      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedImportMessage_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedImportMessage_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedImportMessage_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedImportMessage_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedImportMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportMessage> values) {
-        PrepareBuilder();
-        result.repeatedImportMessage_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedImportMessage() {
-        PrepareBuilder();
-        result.repeatedImportMessage_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {
-        get { return PrepareBuilder().repeatedNestedEnum_; }
-      }
-      public int RepeatedNestedEnumCount {
-        get { return result.RepeatedNestedEnumCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {
-        return result.GetRepeatedNestedEnum(index);
-      }
-      public Builder SetRepeatedNestedEnum(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.repeatedNestedEnum_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.repeatedNestedEnum_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedNestedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> values) {
-        PrepareBuilder();
-        result.repeatedNestedEnum_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedNestedEnum() {
-        PrepareBuilder();
-        result.repeatedNestedEnum_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedForeignEnumList {
-        get { return PrepareBuilder().repeatedForeignEnum_; }
-      }
-      public int RepeatedForeignEnumCount {
-        get { return result.RepeatedForeignEnumCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedForeignEnum(int index) {
-        return result.GetRepeatedForeignEnum(index);
-      }
-      public Builder SetRepeatedForeignEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.repeatedForeignEnum_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.repeatedForeignEnum_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedForeignEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {
-        PrepareBuilder();
-        result.repeatedForeignEnum_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedForeignEnum() {
-        PrepareBuilder();
-        result.repeatedForeignEnum_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> RepeatedImportEnumList {
-        get { return PrepareBuilder().repeatedImportEnum_; }
-      }
-      public int RepeatedImportEnumCount {
-        get { return result.RepeatedImportEnumCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ImportEnum GetRepeatedImportEnum(int index) {
-        return result.GetRepeatedImportEnum(index);
-      }
-      public Builder SetRepeatedImportEnum(int index, global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {
-        PrepareBuilder();
-        result.repeatedImportEnum_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {
-        PrepareBuilder();
-        result.repeatedImportEnum_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedImportEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportEnum> values) {
-        PrepareBuilder();
-        result.repeatedImportEnum_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedImportEnum() {
-        PrepareBuilder();
-        result.repeatedImportEnum_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedStringPieceList {
-        get { return PrepareBuilder().repeatedStringPiece_; }
-      }
-      public int RepeatedStringPieceCount {
-        get { return result.RepeatedStringPieceCount; }
-      }
-      public string GetRepeatedStringPiece(int index) {
-        return result.GetRepeatedStringPiece(index);
-      }
-      public Builder SetRepeatedStringPiece(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedStringPiece_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedStringPiece(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedStringPiece_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedStringPiece(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedStringPiece_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedStringPiece() {
-        PrepareBuilder();
-        result.repeatedStringPiece_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedCordList {
-        get { return PrepareBuilder().repeatedCord_; }
-      }
-      public int RepeatedCordCount {
-        get { return result.RepeatedCordCount; }
-      }
-      public string GetRepeatedCord(int index) {
-        return result.GetRepeatedCord(index);
-      }
-      public Builder SetRepeatedCord(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedCord_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedCord(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedCord_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedCord(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedCord_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedCord() {
-        PrepareBuilder();
-        result.repeatedCord_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedLazyMessageList {
-        get { return PrepareBuilder().repeatedLazyMessage_; }
-      }
-      public int RepeatedLazyMessageCount {
-        get { return result.RepeatedLazyMessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedLazyMessage(int index) {
-        return result.GetRepeatedLazyMessage(index);
-      }
-      public Builder SetRepeatedLazyMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedLazyMessage_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedLazyMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedLazyMessage_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedLazyMessage_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedLazyMessage_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedLazyMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> values) {
-        PrepareBuilder();
-        result.repeatedLazyMessage_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedLazyMessage() {
-        PrepareBuilder();
-        result.repeatedLazyMessage_.Clear();
-        return this;
-      }
-
-      public bool HasDefaultInt32 {
-        get { return result.hasDefaultInt32; }
-      }
-      public int DefaultInt32 {
-        get { return result.DefaultInt32; }
-        set { SetDefaultInt32(value); }
-      }
-      public Builder SetDefaultInt32(int value) {
-        PrepareBuilder();
-        result.hasDefaultInt32 = true;
-        result.defaultInt32_ = value;
-        return this;
-      }
-      public Builder ClearDefaultInt32() {
-        PrepareBuilder();
-        result.hasDefaultInt32 = false;
-        result.defaultInt32_ = 41;
-        return this;
-      }
-
-      public bool HasDefaultInt64 {
-        get { return result.hasDefaultInt64; }
-      }
-      public long DefaultInt64 {
-        get { return result.DefaultInt64; }
-        set { SetDefaultInt64(value); }
-      }
-      public Builder SetDefaultInt64(long value) {
-        PrepareBuilder();
-        result.hasDefaultInt64 = true;
-        result.defaultInt64_ = value;
-        return this;
-      }
-      public Builder ClearDefaultInt64() {
-        PrepareBuilder();
-        result.hasDefaultInt64 = false;
-        result.defaultInt64_ = 42L;
-        return this;
-      }
-
-      public bool HasDefaultUint32 {
-        get { return result.hasDefaultUint32; }
-      }
-      public uint DefaultUint32 {
-        get { return result.DefaultUint32; }
-        set { SetDefaultUint32(value); }
-      }
-      public Builder SetDefaultUint32(uint value) {
-        PrepareBuilder();
-        result.hasDefaultUint32 = true;
-        result.defaultUint32_ = value;
-        return this;
-      }
-      public Builder ClearDefaultUint32() {
-        PrepareBuilder();
-        result.hasDefaultUint32 = false;
-        result.defaultUint32_ = 43;
-        return this;
-      }
-
-      public bool HasDefaultUint64 {
-        get { return result.hasDefaultUint64; }
-      }
-      public ulong DefaultUint64 {
-        get { return result.DefaultUint64; }
-        set { SetDefaultUint64(value); }
-      }
-      public Builder SetDefaultUint64(ulong value) {
-        PrepareBuilder();
-        result.hasDefaultUint64 = true;
-        result.defaultUint64_ = value;
-        return this;
-      }
-      public Builder ClearDefaultUint64() {
-        PrepareBuilder();
-        result.hasDefaultUint64 = false;
-        result.defaultUint64_ = 44UL;
-        return this;
-      }
-
-      public bool HasDefaultSint32 {
-        get { return result.hasDefaultSint32; }
-      }
-      public int DefaultSint32 {
-        get { return result.DefaultSint32; }
-        set { SetDefaultSint32(value); }
-      }
-      public Builder SetDefaultSint32(int value) {
-        PrepareBuilder();
-        result.hasDefaultSint32 = true;
-        result.defaultSint32_ = value;
-        return this;
-      }
-      public Builder ClearDefaultSint32() {
-        PrepareBuilder();
-        result.hasDefaultSint32 = false;
-        result.defaultSint32_ = -45;
-        return this;
-      }
-
-      public bool HasDefaultSint64 {
-        get { return result.hasDefaultSint64; }
-      }
-      public long DefaultSint64 {
-        get { return result.DefaultSint64; }
-        set { SetDefaultSint64(value); }
-      }
-      public Builder SetDefaultSint64(long value) {
-        PrepareBuilder();
-        result.hasDefaultSint64 = true;
-        result.defaultSint64_ = value;
-        return this;
-      }
-      public Builder ClearDefaultSint64() {
-        PrepareBuilder();
-        result.hasDefaultSint64 = false;
-        result.defaultSint64_ = 46L;
-        return this;
-      }
-
-      public bool HasDefaultFixed32 {
-        get { return result.hasDefaultFixed32; }
-      }
-      public uint DefaultFixed32 {
-        get { return result.DefaultFixed32; }
-        set { SetDefaultFixed32(value); }
-      }
-      public Builder SetDefaultFixed32(uint value) {
-        PrepareBuilder();
-        result.hasDefaultFixed32 = true;
-        result.defaultFixed32_ = value;
-        return this;
-      }
-      public Builder ClearDefaultFixed32() {
-        PrepareBuilder();
-        result.hasDefaultFixed32 = false;
-        result.defaultFixed32_ = 47;
-        return this;
-      }
-
-      public bool HasDefaultFixed64 {
-        get { return result.hasDefaultFixed64; }
-      }
-      public ulong DefaultFixed64 {
-        get { return result.DefaultFixed64; }
-        set { SetDefaultFixed64(value); }
-      }
-      public Builder SetDefaultFixed64(ulong value) {
-        PrepareBuilder();
-        result.hasDefaultFixed64 = true;
-        result.defaultFixed64_ = value;
-        return this;
-      }
-      public Builder ClearDefaultFixed64() {
-        PrepareBuilder();
-        result.hasDefaultFixed64 = false;
-        result.defaultFixed64_ = 48UL;
-        return this;
-      }
-
-      public bool HasDefaultSfixed32 {
-        get { return result.hasDefaultSfixed32; }
-      }
-      public int DefaultSfixed32 {
-        get { return result.DefaultSfixed32; }
-        set { SetDefaultSfixed32(value); }
-      }
-      public Builder SetDefaultSfixed32(int value) {
-        PrepareBuilder();
-        result.hasDefaultSfixed32 = true;
-        result.defaultSfixed32_ = value;
-        return this;
-      }
-      public Builder ClearDefaultSfixed32() {
-        PrepareBuilder();
-        result.hasDefaultSfixed32 = false;
-        result.defaultSfixed32_ = 49;
-        return this;
-      }
-
-      public bool HasDefaultSfixed64 {
-        get { return result.hasDefaultSfixed64; }
-      }
-      public long DefaultSfixed64 {
-        get { return result.DefaultSfixed64; }
-        set { SetDefaultSfixed64(value); }
-      }
-      public Builder SetDefaultSfixed64(long value) {
-        PrepareBuilder();
-        result.hasDefaultSfixed64 = true;
-        result.defaultSfixed64_ = value;
-        return this;
-      }
-      public Builder ClearDefaultSfixed64() {
-        PrepareBuilder();
-        result.hasDefaultSfixed64 = false;
-        result.defaultSfixed64_ = -50L;
-        return this;
-      }
-
-      public bool HasDefaultFloat {
-        get { return result.hasDefaultFloat; }
-      }
-      public float DefaultFloat {
-        get { return result.DefaultFloat; }
-        set { SetDefaultFloat(value); }
-      }
-      public Builder SetDefaultFloat(float value) {
-        PrepareBuilder();
-        result.hasDefaultFloat = true;
-        result.defaultFloat_ = value;
-        return this;
-      }
-      public Builder ClearDefaultFloat() {
-        PrepareBuilder();
-        result.hasDefaultFloat = false;
-        result.defaultFloat_ = 51.5F;
-        return this;
-      }
-
-      public bool HasDefaultDouble {
-        get { return result.hasDefaultDouble; }
-      }
-      public double DefaultDouble {
-        get { return result.DefaultDouble; }
-        set { SetDefaultDouble(value); }
-      }
-      public Builder SetDefaultDouble(double value) {
-        PrepareBuilder();
-        result.hasDefaultDouble = true;
-        result.defaultDouble_ = value;
-        return this;
-      }
-      public Builder ClearDefaultDouble() {
-        PrepareBuilder();
-        result.hasDefaultDouble = false;
-        result.defaultDouble_ = 52000D;
-        return this;
-      }
-
-      public bool HasDefaultBool {
-        get { return result.hasDefaultBool; }
-      }
-      public bool DefaultBool {
-        get { return result.DefaultBool; }
-        set { SetDefaultBool(value); }
-      }
-      public Builder SetDefaultBool(bool value) {
-        PrepareBuilder();
-        result.hasDefaultBool = true;
-        result.defaultBool_ = value;
-        return this;
-      }
-      public Builder ClearDefaultBool() {
-        PrepareBuilder();
-        result.hasDefaultBool = false;
-        result.defaultBool_ = true;
-        return this;
-      }
-
-      public bool HasDefaultString {
-        get { return result.hasDefaultString; }
-      }
-      public string DefaultString {
-        get { return result.DefaultString; }
-        set { SetDefaultString(value); }
-      }
-      public Builder SetDefaultString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasDefaultString = true;
-        result.defaultString_ = value;
-        return this;
-      }
-      public Builder ClearDefaultString() {
-        PrepareBuilder();
-        result.hasDefaultString = false;
-        result.defaultString_ = "hello";
-        return this;
-      }
-
-      public bool HasDefaultBytes {
-        get { return result.hasDefaultBytes; }
-      }
-      public pb::ByteString DefaultBytes {
-        get { return result.DefaultBytes; }
-        set { SetDefaultBytes(value); }
-      }
-      public Builder SetDefaultBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasDefaultBytes = true;
-        result.defaultBytes_ = value;
-        return this;
-      }
-      public Builder ClearDefaultBytes() {
-        PrepareBuilder();
-        result.hasDefaultBytes = false;
-        result.defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor.Fields[65].DefaultValue;
-        return this;
-      }
-
-      public bool HasDefaultNestedEnum {
-        get { return result.hasDefaultNestedEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum DefaultNestedEnum {
-        get { return result.DefaultNestedEnum; }
-        set { SetDefaultNestedEnum(value); }
-      }
-      public Builder SetDefaultNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.hasDefaultNestedEnum = true;
-        result.defaultNestedEnum_ = value;
-        return this;
-      }
-      public Builder ClearDefaultNestedEnum() {
-        PrepareBuilder();
-        result.hasDefaultNestedEnum = false;
-        result.defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.BAR;
-        return this;
-      }
-
-      public bool HasDefaultForeignEnum {
-        get { return result.hasDefaultForeignEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum DefaultForeignEnum {
-        get { return result.DefaultForeignEnum; }
-        set { SetDefaultForeignEnum(value); }
-      }
-      public Builder SetDefaultForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.hasDefaultForeignEnum = true;
-        result.defaultForeignEnum_ = value;
-        return this;
-      }
-      public Builder ClearDefaultForeignEnum() {
-        PrepareBuilder();
-        result.hasDefaultForeignEnum = false;
-        result.defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_BAR;
-        return this;
-      }
-
-      public bool HasDefaultImportEnum {
-        get { return result.hasDefaultImportEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ImportEnum DefaultImportEnum {
-        get { return result.DefaultImportEnum; }
-        set { SetDefaultImportEnum(value); }
-      }
-      public Builder SetDefaultImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {
-        PrepareBuilder();
-        result.hasDefaultImportEnum = true;
-        result.defaultImportEnum_ = value;
-        return this;
-      }
-      public Builder ClearDefaultImportEnum() {
-        PrepareBuilder();
-        result.hasDefaultImportEnum = false;
-        result.defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_BAR;
-        return this;
-      }
-
-      public bool HasDefaultStringPiece {
-        get { return result.hasDefaultStringPiece; }
-      }
-      public string DefaultStringPiece {
-        get { return result.DefaultStringPiece; }
-        set { SetDefaultStringPiece(value); }
-      }
-      public Builder SetDefaultStringPiece(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasDefaultStringPiece = true;
-        result.defaultStringPiece_ = value;
-        return this;
-      }
-      public Builder ClearDefaultStringPiece() {
-        PrepareBuilder();
-        result.hasDefaultStringPiece = false;
-        result.defaultStringPiece_ = "abc";
-        return this;
-      }
-
-      public bool HasDefaultCord {
-        get { return result.hasDefaultCord; }
-      }
-      public string DefaultCord {
-        get { return result.DefaultCord; }
-        set { SetDefaultCord(value); }
-      }
-      public Builder SetDefaultCord(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasDefaultCord = true;
-        result.defaultCord_ = value;
-        return this;
-      }
-      public Builder ClearDefaultCord() {
-        PrepareBuilder();
-        result.hasDefaultCord = false;
-        result.defaultCord_ = "123";
-        return this;
-      }
-
-      public bool HasOneofUint32 {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofUint32; }
-      }
-      public uint OneofUint32 {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofUint32 ? (uint) result.oneofField_ : 0; }
-        set { SetOneofUint32(value); }
-      }
-      public Builder SetOneofUint32(uint value) {
-        PrepareBuilder();
-        result.oneofField_ = value;
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
-        return this;
-      }
-      public Builder ClearOneofUint32() {
-        PrepareBuilder();
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
-          result.oneofFieldCase_ = OneofFieldOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasOneofNestedMessage {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OneofNestedMessage {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage ? (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage) result.oneofField_ : global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-        set { SetOneofNestedMessage(value); }
-      }
-      public Builder SetOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
-        result.oneofField_ = value;
-        return this;
-      }
-      public Builder SetOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
-        result.oneofField_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage &&
-            result.OneofNestedMessage != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {
-          result.oneofField_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.OneofNestedMessage).MergeFrom(value).BuildPartial();
-        } else {
-          result.oneofField_ = value;
-        }
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
-        return this;
-      }
-      public Builder ClearOneofNestedMessage() {
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
-          PrepareBuilder();
-          result.oneofFieldCase_ = OneofFieldOneofCase.None;
-          result.oneofField_ = null;
-        }
-        return this;
-      }
-
-      public bool HasOneofString {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofString; }
-      }
-      public string OneofString {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofString ? (string) result.oneofField_ : ""; }
-        set { SetOneofString(value); }
-      }
-      public Builder SetOneofString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.oneofField_ = value;
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofString;
-        return this;
-      }
-      public Builder ClearOneofString() {
-        PrepareBuilder();
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
-          result.oneofFieldCase_ = OneofFieldOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasOneofBytes {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofBytes; }
-      }
-      public pb::ByteString OneofBytes {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofBytes ? (pb::ByteString) result.oneofField_ : pb::ByteString.Empty; }
-        set { SetOneofBytes(value); }
-      }
-      public Builder SetOneofBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.oneofField_ = value;
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofBytes;
-        return this;
-      }
-      public Builder ClearOneofBytes() {
-        PrepareBuilder();
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
-          result.oneofFieldCase_ = OneofFieldOneofCase.None;
-        }
-        return this;
-      }
-
-      public OneofFieldOneofCase OneofFieldCase {
-        get { return result.oneofFieldCase_; }
-      }
-      public Builder ClearOneofField() {
-        PrepareBuilder();
-        result.oneofField_ = null;
-        result.oneofFieldCase_ = OneofFieldOneofCase.None;
-        return this;
-      }
-    }
-    static TestAllTypes() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class NestedTestAllTypes : pb::GeneratedMessage<NestedTestAllTypes, NestedTestAllTypes.Builder> {
-    private NestedTestAllTypes() { }
-    private static readonly NestedTestAllTypes defaultInstance = new NestedTestAllTypes().MakeReadOnly();
-    private static readonly string[] _nestedTestAllTypesFieldNames = new string[] { "child", "payload", "repeated_child" };
-    private static readonly uint[] _nestedTestAllTypesFieldTags = new uint[] { 10, 18, 26 };
-    public static NestedTestAllTypes DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override NestedTestAllTypes DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override NestedTestAllTypes ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<NestedTestAllTypes, NestedTestAllTypes.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable; }
-    }
-
-    public const int ChildFieldNumber = 1;
-    private bool hasChild;
-    private global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes child_;
-    public bool HasChild {
-      get { return hasChild; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes Child {
-      get { return child_ ?? global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.DefaultInstance; }
-    }
-
-    public const int PayloadFieldNumber = 2;
-    private bool hasPayload;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes payload_;
-    public bool HasPayload {
-      get { return hasPayload; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes Payload {
-      get { return payload_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-    }
-
-    public const int RepeatedChildFieldNumber = 3;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes> repeatedChild_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes> RepeatedChildList {
-      get { return repeatedChild_; }
-    }
-    public int RepeatedChildCount {
-      get { return repeatedChild_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes GetRepeatedChild(int index) {
-      return repeatedChild_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _nestedTestAllTypesFieldNames;
-      if (hasChild) {
-        output.WriteMessage(1, field_names[0], Child);
-      }
-      if (hasPayload) {
-        output.WriteMessage(2, field_names[1], Payload);
-      }
-      if (repeatedChild_.Count > 0) {
-        output.WriteMessageArray(3, field_names[2], repeatedChild_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasChild) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, Child);
-      }
-      if (hasPayload) {
-        size += pb::CodedOutputStream.ComputeMessageSize(2, Payload);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes element in RepeatedChildList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(3, element);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static NestedTestAllTypes ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static NestedTestAllTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private NestedTestAllTypes MakeReadOnly() {
-      repeatedChild_.MakeReadOnly();
-      return this;
-    }
-
-    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(NestedTestAllTypes prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<NestedTestAllTypes, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(NestedTestAllTypes cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private NestedTestAllTypes result;
-
-      private NestedTestAllTypes PrepareBuilder() {
-        if (resultIsReadOnly) {
-          NestedTestAllTypes original = result;
-          result = new NestedTestAllTypes();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override NestedTestAllTypes MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.Descriptor; }
-      }
-
-      public override NestedTestAllTypes DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.DefaultInstance; }
-      }
-
-      public override NestedTestAllTypes BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is NestedTestAllTypes) {
-          return MergeFrom((NestedTestAllTypes) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(NestedTestAllTypes other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasChild) {
-          MergeChild(other.Child);
-        }
-        if (other.HasPayload) {
-          MergePayload(other.Payload);
-        }
-        if (other.repeatedChild_.Count != 0) {
-          result.repeatedChild_.Add(other.repeatedChild_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_nestedTestAllTypesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _nestedTestAllTypesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.CreateBuilder();
-              if (result.hasChild) {
-                subBuilder.MergeFrom(Child);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Child = subBuilder.BuildPartial();
-              break;
-            }
-            case 18: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-              if (result.hasPayload) {
-                subBuilder.MergeFrom(Payload);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Payload = subBuilder.BuildPartial();
-              break;
-            }
-            case 26: {
-              input.ReadMessageArray(tag, field_name, result.repeatedChild_, global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasChild {
-       get { return result.hasChild; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes Child {
-        get { return result.Child; }
-        set { SetChild(value); }
-      }
-      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasChild = true;
-        result.child_ = value;
-        return this;
-      }
-      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasChild = true;
-        result.child_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeChild(global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasChild &&
-            result.child_ != global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.DefaultInstance) {
-            result.child_ = global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.CreateBuilder(result.child_).MergeFrom(value).BuildPartial();
-        } else {
-          result.child_ = value;
-        }
-        result.hasChild = true;
-        return this;
-      }
-      public Builder ClearChild() {
-        PrepareBuilder();
-        result.hasChild = false;
-        result.child_ = null;
-        return this;
-      }
-
-      public bool HasPayload {
-       get { return result.hasPayload; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes Payload {
-        get { return result.Payload; }
-        set { SetPayload(value); }
-      }
-      public Builder SetPayload(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasPayload = true;
-        result.payload_ = value;
-        return this;
-      }
-      public Builder SetPayload(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasPayload = true;
-        result.payload_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergePayload(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasPayload &&
-            result.payload_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-            result.payload_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.payload_).MergeFrom(value).BuildPartial();
-        } else {
-          result.payload_ = value;
-        }
-        result.hasPayload = true;
-        return this;
-      }
-      public Builder ClearPayload() {
-        PrepareBuilder();
-        result.hasPayload = false;
-        result.payload_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes> RepeatedChildList {
-        get { return PrepareBuilder().repeatedChild_; }
-      }
-      public int RepeatedChildCount {
-        get { return result.RepeatedChildCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes GetRepeatedChild(int index) {
-        return result.GetRepeatedChild(index);
-      }
-      public Builder SetRepeatedChild(int index, global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedChild_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedChild(int index, global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedChild_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedChild(global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedChild_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedChild(global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedChild_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedChild(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.NestedTestAllTypes> values) {
-        PrepareBuilder();
-        result.repeatedChild_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedChild() {
-        PrepareBuilder();
-        result.repeatedChild_.Clear();
-        return this;
-      }
-    }
-    static NestedTestAllTypes() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestDeprecatedFields : pb::GeneratedMessage<TestDeprecatedFields, TestDeprecatedFields.Builder> {
-    private TestDeprecatedFields() { }
-    private static readonly TestDeprecatedFields defaultInstance = new TestDeprecatedFields().MakeReadOnly();
-    private static readonly string[] _testDeprecatedFieldsFieldNames = new string[] { "deprecated_int32" };
-    private static readonly uint[] _testDeprecatedFieldsFieldTags = new uint[] { 8 };
-    public static TestDeprecatedFields DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestDeprecatedFields DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestDeprecatedFields ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestDeprecatedFields, TestDeprecatedFields.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable; }
-    }
-
-    public const int DeprecatedInt32FieldNumber = 1;
-    private bool hasDeprecatedInt32;
-    private int deprecatedInt32_;
-    [global::System.ObsoleteAttribute()]
-    public bool HasDeprecatedInt32 {
-      get { return hasDeprecatedInt32; }
-    }
-    [global::System.ObsoleteAttribute()]
-    public int DeprecatedInt32 {
-      get { return deprecatedInt32_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testDeprecatedFieldsFieldNames;
-      if (hasDeprecatedInt32) {
-        output.WriteInt32(1, field_names[0], DeprecatedInt32);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasDeprecatedInt32) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedInt32);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestDeprecatedFields ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestDeprecatedFields ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestDeprecatedFields MakeReadOnly() {
-      return this;
-    }
-
-    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(TestDeprecatedFields prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestDeprecatedFields, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestDeprecatedFields cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestDeprecatedFields result;
-
-      private TestDeprecatedFields PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestDeprecatedFields original = result;
-          result = new TestDeprecatedFields();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestDeprecatedFields MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Descriptor; }
-      }
-
-      public override TestDeprecatedFields DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.DefaultInstance; }
-      }
-
-      public override TestDeprecatedFields BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestDeprecatedFields) {
-          return MergeFrom((TestDeprecatedFields) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestDeprecatedFields other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasDeprecatedInt32) {
-          DeprecatedInt32 = other.DeprecatedInt32;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testDeprecatedFieldsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testDeprecatedFieldsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasDeprecatedInt32 = input.ReadInt32(ref result.deprecatedInt32_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      [global::System.ObsoleteAttribute()]
-      public bool HasDeprecatedInt32 {
-        get { return result.hasDeprecatedInt32; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public int DeprecatedInt32 {
-        get { return result.DeprecatedInt32; }
-        set { SetDeprecatedInt32(value); }
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetDeprecatedInt32(int value) {
-        PrepareBuilder();
-        result.hasDeprecatedInt32 = true;
-        result.deprecatedInt32_ = value;
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder ClearDeprecatedInt32() {
-        PrepareBuilder();
-        result.hasDeprecatedInt32 = false;
-        result.deprecatedInt32_ = 0;
-        return this;
-      }
-    }
-    static TestDeprecatedFields() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class ForeignMessage : pb::GeneratedMessage<ForeignMessage, ForeignMessage.Builder> {
-    private ForeignMessage() { }
-    private static readonly ForeignMessage defaultInstance = new ForeignMessage().MakeReadOnly();
-    private static readonly string[] _foreignMessageFieldNames = new string[] { "c" };
-    private static readonly uint[] _foreignMessageFieldTags = new uint[] { 8 };
-    public static ForeignMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override ForeignMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override ForeignMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_ForeignMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<ForeignMessage, ForeignMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable; }
-    }
-
-    public const int CFieldNumber = 1;
-    private bool hasC;
-    private int c_;
-    public bool HasC {
-      get { return hasC; }
-    }
-    public int C {
-      get { return c_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _foreignMessageFieldNames;
-      if (hasC) {
-        output.WriteInt32(1, field_names[0], C);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasC) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, C);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static ForeignMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ForeignMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(ForeignMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<ForeignMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ForeignMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private ForeignMessage result;
-
-      private ForeignMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ForeignMessage original = result;
-          result = new ForeignMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override ForeignMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Descriptor; }
-      }
-
-      public override ForeignMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }
-      }
-
-      public override ForeignMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ForeignMessage) {
-          return MergeFrom((ForeignMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(ForeignMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasC) {
-          C = other.C;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_foreignMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _foreignMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasC = input.ReadInt32(ref result.c_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasC {
-        get { return result.hasC; }
-      }
-      public int C {
-        get { return result.C; }
-        set { SetC(value); }
-      }
-      public Builder SetC(int value) {
-        PrepareBuilder();
-        result.hasC = true;
-        result.c_ = value;
-        return this;
-      }
-      public Builder ClearC() {
-        PrepareBuilder();
-        result.hasC = false;
-        result.c_ = 0;
-        return this;
-      }
-    }
-    static ForeignMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestReservedFields : pb::GeneratedMessage<TestReservedFields, TestReservedFields.Builder> {
-    private TestReservedFields() { }
-    private static readonly TestReservedFields defaultInstance = new TestReservedFields().MakeReadOnly();
-    private static readonly string[] _testReservedFieldsFieldNames = new string[] {  };
-    private static readonly uint[] _testReservedFieldsFieldTags = new uint[] {  };
-    public static TestReservedFields DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestReservedFields DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestReservedFields ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestReservedFields__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestReservedFields, TestReservedFields.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testReservedFieldsFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestReservedFields ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestReservedFields ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestReservedFields ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestReservedFields ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestReservedFields ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestReservedFields ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestReservedFields ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestReservedFields ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestReservedFields ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestReservedFields ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestReservedFields MakeReadOnly() {
-      return this;
-    }
-
-    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(TestReservedFields prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestReservedFields, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestReservedFields cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestReservedFields result;
-
-      private TestReservedFields PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestReservedFields original = result;
-          result = new TestReservedFields();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestReservedFields MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestReservedFields.Descriptor; }
-      }
-
-      public override TestReservedFields DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestReservedFields.DefaultInstance; }
-      }
-
-      public override TestReservedFields BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestReservedFields) {
-          return MergeFrom((TestReservedFields) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestReservedFields other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestReservedFields.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testReservedFieldsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testReservedFieldsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestReservedFields() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestAllExtensions : pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder> {
-    private TestAllExtensions() { }
-    private static readonly TestAllExtensions defaultInstance = new TestAllExtensions().MakeReadOnly();
-    private static readonly string[] _testAllExtensionsFieldNames = new string[] {  };
-    private static readonly uint[] _testAllExtensionsFieldTags = new uint[] {  };
-    public static TestAllExtensions DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestAllExtensions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestAllExtensions ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllExtensions__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestAllExtensions, TestAllExtensions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testAllExtensionsFieldNames;
-      pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestAllExtensions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestAllExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllExtensions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestAllExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllExtensions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestAllExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllExtensions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestAllExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestAllExtensions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestAllExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestAllExtensions MakeReadOnly() {
-      return this;
-    }
-
-    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(TestAllExtensions prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestAllExtensions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestAllExtensions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestAllExtensions result;
-
-      private TestAllExtensions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestAllExtensions original = result;
-          result = new TestAllExtensions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestAllExtensions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Descriptor; }
-      }
-
-      public override TestAllExtensions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.DefaultInstance; }
-      }
-
-      public override TestAllExtensions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestAllExtensions) {
-          return MergeFrom((TestAllExtensions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestAllExtensions other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.DefaultInstance) return this;
-        PrepareBuilder();
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testAllExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testAllExtensionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestAllExtensions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class OptionalGroup_extension : pb::GeneratedMessage<OptionalGroup_extension, OptionalGroup_extension.Builder> {
-    private OptionalGroup_extension() { }
-    private static readonly OptionalGroup_extension defaultInstance = new OptionalGroup_extension().MakeReadOnly();
-    private static readonly string[] _optionalGroupExtensionFieldNames = new string[] { "a" };
-    private static readonly uint[] _optionalGroupExtensionFieldTags = new uint[] { 136 };
-    public static OptionalGroup_extension DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override OptionalGroup_extension DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override OptionalGroup_extension ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup_extension, OptionalGroup_extension.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable; }
-    }
-
-    public const int AFieldNumber = 17;
-    private bool hasA;
-    private int a_;
-    public bool HasA {
-      get { return hasA; }
-    }
-    public int A {
-      get { return a_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _optionalGroupExtensionFieldNames;
-      if (hasA) {
-        output.WriteInt32(17, field_names[0], A);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasA) {
-        size += pb::CodedOutputStream.ComputeInt32Size(17, A);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static OptionalGroup_extension ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static OptionalGroup_extension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private OptionalGroup_extension MakeReadOnly() {
-      return this;
-    }
-
-    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(OptionalGroup_extension prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup_extension, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(OptionalGroup_extension cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private OptionalGroup_extension result;
-
-      private OptionalGroup_extension PrepareBuilder() {
-        if (resultIsReadOnly) {
-          OptionalGroup_extension original = result;
-          result = new OptionalGroup_extension();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override OptionalGroup_extension MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Descriptor; }
-      }
-
-      public override OptionalGroup_extension DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.DefaultInstance; }
-      }
-
-      public override OptionalGroup_extension BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is OptionalGroup_extension) {
-          return MergeFrom((OptionalGroup_extension) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(OptionalGroup_extension other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasA) {
-          A = other.A;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_optionalGroupExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _optionalGroupExtensionFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 136: {
-              result.hasA = input.ReadInt32(ref result.a_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasA {
-        get { return result.hasA; }
-      }
-      public int A {
-        get { return result.A; }
-        set { SetA(value); }
-      }
-      public Builder SetA(int value) {
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = value;
-        return this;
-      }
-      public Builder ClearA() {
-        PrepareBuilder();
-        result.hasA = false;
-        result.a_ = 0;
-        return this;
-      }
-    }
-    static OptionalGroup_extension() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class RepeatedGroup_extension : pb::GeneratedMessage<RepeatedGroup_extension, RepeatedGroup_extension.Builder> {
-    private RepeatedGroup_extension() { }
-    private static readonly RepeatedGroup_extension defaultInstance = new RepeatedGroup_extension().MakeReadOnly();
-    private static readonly string[] _repeatedGroupExtensionFieldNames = new string[] { "a" };
-    private static readonly uint[] _repeatedGroupExtensionFieldTags = new uint[] { 376 };
-    public static RepeatedGroup_extension DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override RepeatedGroup_extension DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override RepeatedGroup_extension ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup_extension, RepeatedGroup_extension.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable; }
-    }
-
-    public const int AFieldNumber = 47;
-    private bool hasA;
-    private int a_;
-    public bool HasA {
-      get { return hasA; }
-    }
-    public int A {
-      get { return a_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _repeatedGroupExtensionFieldNames;
-      if (hasA) {
-        output.WriteInt32(47, field_names[0], A);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasA) {
-        size += pb::CodedOutputStream.ComputeInt32Size(47, A);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static RepeatedGroup_extension ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static RepeatedGroup_extension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private RepeatedGroup_extension MakeReadOnly() {
-      return this;
-    }
-
-    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(RepeatedGroup_extension prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup_extension, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(RepeatedGroup_extension cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private RepeatedGroup_extension result;
-
-      private RepeatedGroup_extension PrepareBuilder() {
-        if (resultIsReadOnly) {
-          RepeatedGroup_extension original = result;
-          result = new RepeatedGroup_extension();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override RepeatedGroup_extension MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Descriptor; }
-      }
-
-      public override RepeatedGroup_extension DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.DefaultInstance; }
-      }
-
-      public override RepeatedGroup_extension BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is RepeatedGroup_extension) {
-          return MergeFrom((RepeatedGroup_extension) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(RepeatedGroup_extension other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasA) {
-          A = other.A;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _repeatedGroupExtensionFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 376: {
-              result.hasA = input.ReadInt32(ref result.a_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasA {
-        get { return result.hasA; }
-      }
-      public int A {
-        get { return result.A; }
-        set { SetA(value); }
-      }
-      public Builder SetA(int value) {
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = value;
-        return this;
-      }
-      public Builder ClearA() {
-        PrepareBuilder();
-        result.hasA = false;
-        result.a_ = 0;
-        return this;
-      }
-    }
-    static RepeatedGroup_extension() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestNestedExtension : pb::GeneratedMessage<TestNestedExtension, TestNestedExtension.Builder> {
-    private TestNestedExtension() { }
-    private static readonly TestNestedExtension defaultInstance = new TestNestedExtension().MakeReadOnly();
-    private static readonly string[] _testNestedExtensionFieldNames = new string[] {  };
-    private static readonly uint[] _testNestedExtensionFieldTags = new uint[] {  };
-    public static TestNestedExtension DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestNestedExtension DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestNestedExtension ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestNestedExtension__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestNestedExtension, TestNestedExtension.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable; }
-    }
-
-    public const int TestFieldNumber = 1002;
-    public static pb::GeneratedExtensionBase<string> Test;
-    public const int NestedStringExtensionFieldNumber = 1003;
-    public static pb::GeneratedExtensionBase<string> NestedStringExtension;
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testNestedExtensionFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestNestedExtension ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestNestedExtension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestNestedExtension ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestNestedExtension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestNestedExtension ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestNestedExtension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestNestedExtension ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestNestedExtension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestNestedExtension ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestNestedExtension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestNestedExtension MakeReadOnly() {
-      return this;
-    }
-
-    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(TestNestedExtension prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedExtension, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestNestedExtension cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestNestedExtension result;
-
-      private TestNestedExtension PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestNestedExtension original = result;
-          result = new TestNestedExtension();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestNestedExtension MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor; }
-      }
-
-      public override TestNestedExtension DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.DefaultInstance; }
-      }
-
-      public override TestNestedExtension BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestNestedExtension) {
-          return MergeFrom((TestNestedExtension) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestNestedExtension other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testNestedExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testNestedExtensionFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestNestedExtension() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestRequired : pb::GeneratedMessage<TestRequired, TestRequired.Builder> {
-    private TestRequired() { }
-    private static readonly TestRequired defaultInstance = new TestRequired().MakeReadOnly();
-    private static readonly string[] _testRequiredFieldNames = new string[] { "a", "b", "c", "dummy10", "dummy11", "dummy12", "dummy13", "dummy14", "dummy15", "dummy16", "dummy17", "dummy18", "dummy19", "dummy2", "dummy20", "dummy21", "dummy22", "dummy23", "dummy24", "dummy25", "dummy26", "dummy27", "dummy28", "dummy29", "dummy30", "dummy31", "dummy32", "dummy4", "dummy5", "dummy6", "dummy7", "dummy8", "dummy9" };
-    private static readonly uint[] _testRequiredFieldTags = new uint[] { 8, 24, 264, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 16, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, 256, 32, 40, 48, 56, 64, 72 };
-    public static TestRequired DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestRequired DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestRequired ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRequired__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestRequired, TestRequired.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRequired__FieldAccessorTable; }
-    }
-
-    public const int SingleFieldNumber = 1000;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestRequired> Single;
-    public const int MultiFieldNumber = 1001;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestRequired>> Multi;
-    public const int AFieldNumber = 1;
-    private bool hasA;
-    private int a_;
-    public bool HasA {
-      get { return hasA; }
-    }
-    public int A {
-      get { return a_; }
-    }
-
-    public const int Dummy2FieldNumber = 2;
-    private bool hasDummy2;
-    private int dummy2_;
-    public bool HasDummy2 {
-      get { return hasDummy2; }
-    }
-    public int Dummy2 {
-      get { return dummy2_; }
-    }
-
-    public const int BFieldNumber = 3;
-    private bool hasB;
-    private int b_;
-    public bool HasB {
-      get { return hasB; }
-    }
-    public int B {
-      get { return b_; }
-    }
-
-    public const int Dummy4FieldNumber = 4;
-    private bool hasDummy4;
-    private int dummy4_;
-    public bool HasDummy4 {
-      get { return hasDummy4; }
-    }
-    public int Dummy4 {
-      get { return dummy4_; }
-    }
-
-    public const int Dummy5FieldNumber = 5;
-    private bool hasDummy5;
-    private int dummy5_;
-    public bool HasDummy5 {
-      get { return hasDummy5; }
-    }
-    public int Dummy5 {
-      get { return dummy5_; }
-    }
-
-    public const int Dummy6FieldNumber = 6;
-    private bool hasDummy6;
-    private int dummy6_;
-    public bool HasDummy6 {
-      get { return hasDummy6; }
-    }
-    public int Dummy6 {
-      get { return dummy6_; }
-    }
-
-    public const int Dummy7FieldNumber = 7;
-    private bool hasDummy7;
-    private int dummy7_;
-    public bool HasDummy7 {
-      get { return hasDummy7; }
-    }
-    public int Dummy7 {
-      get { return dummy7_; }
-    }
-
-    public const int Dummy8FieldNumber = 8;
-    private bool hasDummy8;
-    private int dummy8_;
-    public bool HasDummy8 {
-      get { return hasDummy8; }
-    }
-    public int Dummy8 {
-      get { return dummy8_; }
-    }
-
-    public const int Dummy9FieldNumber = 9;
-    private bool hasDummy9;
-    private int dummy9_;
-    public bool HasDummy9 {
-      get { return hasDummy9; }
-    }
-    public int Dummy9 {
-      get { return dummy9_; }
-    }
-
-    public const int Dummy10FieldNumber = 10;
-    private bool hasDummy10;
-    private int dummy10_;
-    public bool HasDummy10 {
-      get { return hasDummy10; }
-    }
-    public int Dummy10 {
-      get { return dummy10_; }
-    }
-
-    public const int Dummy11FieldNumber = 11;
-    private bool hasDummy11;
-    private int dummy11_;
-    public bool HasDummy11 {
-      get { return hasDummy11; }
-    }
-    public int Dummy11 {
-      get { return dummy11_; }
-    }
-
-    public const int Dummy12FieldNumber = 12;
-    private bool hasDummy12;
-    private int dummy12_;
-    public bool HasDummy12 {
-      get { return hasDummy12; }
-    }
-    public int Dummy12 {
-      get { return dummy12_; }
-    }
-
-    public const int Dummy13FieldNumber = 13;
-    private bool hasDummy13;
-    private int dummy13_;
-    public bool HasDummy13 {
-      get { return hasDummy13; }
-    }
-    public int Dummy13 {
-      get { return dummy13_; }
-    }
-
-    public const int Dummy14FieldNumber = 14;
-    private bool hasDummy14;
-    private int dummy14_;
-    public bool HasDummy14 {
-      get { return hasDummy14; }
-    }
-    public int Dummy14 {
-      get { return dummy14_; }
-    }
-
-    public const int Dummy15FieldNumber = 15;
-    private bool hasDummy15;
-    private int dummy15_;
-    public bool HasDummy15 {
-      get { return hasDummy15; }
-    }
-    public int Dummy15 {
-      get { return dummy15_; }
-    }
-
-    public const int Dummy16FieldNumber = 16;
-    private bool hasDummy16;
-    private int dummy16_;
-    public bool HasDummy16 {
-      get { return hasDummy16; }
-    }
-    public int Dummy16 {
-      get { return dummy16_; }
-    }
-
-    public const int Dummy17FieldNumber = 17;
-    private bool hasDummy17;
-    private int dummy17_;
-    public bool HasDummy17 {
-      get { return hasDummy17; }
-    }
-    public int Dummy17 {
-      get { return dummy17_; }
-    }
-
-    public const int Dummy18FieldNumber = 18;
-    private bool hasDummy18;
-    private int dummy18_;
-    public bool HasDummy18 {
-      get { return hasDummy18; }
-    }
-    public int Dummy18 {
-      get { return dummy18_; }
-    }
-
-    public const int Dummy19FieldNumber = 19;
-    private bool hasDummy19;
-    private int dummy19_;
-    public bool HasDummy19 {
-      get { return hasDummy19; }
-    }
-    public int Dummy19 {
-      get { return dummy19_; }
-    }
-
-    public const int Dummy20FieldNumber = 20;
-    private bool hasDummy20;
-    private int dummy20_;
-    public bool HasDummy20 {
-      get { return hasDummy20; }
-    }
-    public int Dummy20 {
-      get { return dummy20_; }
-    }
-
-    public const int Dummy21FieldNumber = 21;
-    private bool hasDummy21;
-    private int dummy21_;
-    public bool HasDummy21 {
-      get { return hasDummy21; }
-    }
-    public int Dummy21 {
-      get { return dummy21_; }
-    }
-
-    public const int Dummy22FieldNumber = 22;
-    private bool hasDummy22;
-    private int dummy22_;
-    public bool HasDummy22 {
-      get { return hasDummy22; }
-    }
-    public int Dummy22 {
-      get { return dummy22_; }
-    }
-
-    public const int Dummy23FieldNumber = 23;
-    private bool hasDummy23;
-    private int dummy23_;
-    public bool HasDummy23 {
-      get { return hasDummy23; }
-    }
-    public int Dummy23 {
-      get { return dummy23_; }
-    }
-
-    public const int Dummy24FieldNumber = 24;
-    private bool hasDummy24;
-    private int dummy24_;
-    public bool HasDummy24 {
-      get { return hasDummy24; }
-    }
-    public int Dummy24 {
-      get { return dummy24_; }
-    }
-
-    public const int Dummy25FieldNumber = 25;
-    private bool hasDummy25;
-    private int dummy25_;
-    public bool HasDummy25 {
-      get { return hasDummy25; }
-    }
-    public int Dummy25 {
-      get { return dummy25_; }
-    }
-
-    public const int Dummy26FieldNumber = 26;
-    private bool hasDummy26;
-    private int dummy26_;
-    public bool HasDummy26 {
-      get { return hasDummy26; }
-    }
-    public int Dummy26 {
-      get { return dummy26_; }
-    }
-
-    public const int Dummy27FieldNumber = 27;
-    private bool hasDummy27;
-    private int dummy27_;
-    public bool HasDummy27 {
-      get { return hasDummy27; }
-    }
-    public int Dummy27 {
-      get { return dummy27_; }
-    }
-
-    public const int Dummy28FieldNumber = 28;
-    private bool hasDummy28;
-    private int dummy28_;
-    public bool HasDummy28 {
-      get { return hasDummy28; }
-    }
-    public int Dummy28 {
-      get { return dummy28_; }
-    }
-
-    public const int Dummy29FieldNumber = 29;
-    private bool hasDummy29;
-    private int dummy29_;
-    public bool HasDummy29 {
-      get { return hasDummy29; }
-    }
-    public int Dummy29 {
-      get { return dummy29_; }
-    }
-
-    public const int Dummy30FieldNumber = 30;
-    private bool hasDummy30;
-    private int dummy30_;
-    public bool HasDummy30 {
-      get { return hasDummy30; }
-    }
-    public int Dummy30 {
-      get { return dummy30_; }
-    }
-
-    public const int Dummy31FieldNumber = 31;
-    private bool hasDummy31;
-    private int dummy31_;
-    public bool HasDummy31 {
-      get { return hasDummy31; }
-    }
-    public int Dummy31 {
-      get { return dummy31_; }
-    }
-
-    public const int Dummy32FieldNumber = 32;
-    private bool hasDummy32;
-    private int dummy32_;
-    public bool HasDummy32 {
-      get { return hasDummy32; }
-    }
-    public int Dummy32 {
-      get { return dummy32_; }
-    }
-
-    public const int CFieldNumber = 33;
-    private bool hasC;
-    private int c_;
-    public bool HasC {
-      get { return hasC; }
-    }
-    public int C {
-      get { return c_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!hasA) return false;
-        if (!hasB) return false;
-        if (!hasC) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testRequiredFieldNames;
-      if (hasA) {
-        output.WriteInt32(1, field_names[0], A);
-      }
-      if (hasDummy2) {
-        output.WriteInt32(2, field_names[13], Dummy2);
-      }
-      if (hasB) {
-        output.WriteInt32(3, field_names[1], B);
-      }
-      if (hasDummy4) {
-        output.WriteInt32(4, field_names[27], Dummy4);
-      }
-      if (hasDummy5) {
-        output.WriteInt32(5, field_names[28], Dummy5);
-      }
-      if (hasDummy6) {
-        output.WriteInt32(6, field_names[29], Dummy6);
-      }
-      if (hasDummy7) {
-        output.WriteInt32(7, field_names[30], Dummy7);
-      }
-      if (hasDummy8) {
-        output.WriteInt32(8, field_names[31], Dummy8);
-      }
-      if (hasDummy9) {
-        output.WriteInt32(9, field_names[32], Dummy9);
-      }
-      if (hasDummy10) {
-        output.WriteInt32(10, field_names[3], Dummy10);
-      }
-      if (hasDummy11) {
-        output.WriteInt32(11, field_names[4], Dummy11);
-      }
-      if (hasDummy12) {
-        output.WriteInt32(12, field_names[5], Dummy12);
-      }
-      if (hasDummy13) {
-        output.WriteInt32(13, field_names[6], Dummy13);
-      }
-      if (hasDummy14) {
-        output.WriteInt32(14, field_names[7], Dummy14);
-      }
-      if (hasDummy15) {
-        output.WriteInt32(15, field_names[8], Dummy15);
-      }
-      if (hasDummy16) {
-        output.WriteInt32(16, field_names[9], Dummy16);
-      }
-      if (hasDummy17) {
-        output.WriteInt32(17, field_names[10], Dummy17);
-      }
-      if (hasDummy18) {
-        output.WriteInt32(18, field_names[11], Dummy18);
-      }
-      if (hasDummy19) {
-        output.WriteInt32(19, field_names[12], Dummy19);
-      }
-      if (hasDummy20) {
-        output.WriteInt32(20, field_names[14], Dummy20);
-      }
-      if (hasDummy21) {
-        output.WriteInt32(21, field_names[15], Dummy21);
-      }
-      if (hasDummy22) {
-        output.WriteInt32(22, field_names[16], Dummy22);
-      }
-      if (hasDummy23) {
-        output.WriteInt32(23, field_names[17], Dummy23);
-      }
-      if (hasDummy24) {
-        output.WriteInt32(24, field_names[18], Dummy24);
-      }
-      if (hasDummy25) {
-        output.WriteInt32(25, field_names[19], Dummy25);
-      }
-      if (hasDummy26) {
-        output.WriteInt32(26, field_names[20], Dummy26);
-      }
-      if (hasDummy27) {
-        output.WriteInt32(27, field_names[21], Dummy27);
-      }
-      if (hasDummy28) {
-        output.WriteInt32(28, field_names[22], Dummy28);
-      }
-      if (hasDummy29) {
-        output.WriteInt32(29, field_names[23], Dummy29);
-      }
-      if (hasDummy30) {
-        output.WriteInt32(30, field_names[24], Dummy30);
-      }
-      if (hasDummy31) {
-        output.WriteInt32(31, field_names[25], Dummy31);
-      }
-      if (hasDummy32) {
-        output.WriteInt32(32, field_names[26], Dummy32);
-      }
-      if (hasC) {
-        output.WriteInt32(33, field_names[2], C);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasA) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, A);
-      }
-      if (hasDummy2) {
-        size += pb::CodedOutputStream.ComputeInt32Size(2, Dummy2);
-      }
-      if (hasB) {
-        size += pb::CodedOutputStream.ComputeInt32Size(3, B);
-      }
-      if (hasDummy4) {
-        size += pb::CodedOutputStream.ComputeInt32Size(4, Dummy4);
-      }
-      if (hasDummy5) {
-        size += pb::CodedOutputStream.ComputeInt32Size(5, Dummy5);
-      }
-      if (hasDummy6) {
-        size += pb::CodedOutputStream.ComputeInt32Size(6, Dummy6);
-      }
-      if (hasDummy7) {
-        size += pb::CodedOutputStream.ComputeInt32Size(7, Dummy7);
-      }
-      if (hasDummy8) {
-        size += pb::CodedOutputStream.ComputeInt32Size(8, Dummy8);
-      }
-      if (hasDummy9) {
-        size += pb::CodedOutputStream.ComputeInt32Size(9, Dummy9);
-      }
-      if (hasDummy10) {
-        size += pb::CodedOutputStream.ComputeInt32Size(10, Dummy10);
-      }
-      if (hasDummy11) {
-        size += pb::CodedOutputStream.ComputeInt32Size(11, Dummy11);
-      }
-      if (hasDummy12) {
-        size += pb::CodedOutputStream.ComputeInt32Size(12, Dummy12);
-      }
-      if (hasDummy13) {
-        size += pb::CodedOutputStream.ComputeInt32Size(13, Dummy13);
-      }
-      if (hasDummy14) {
-        size += pb::CodedOutputStream.ComputeInt32Size(14, Dummy14);
-      }
-      if (hasDummy15) {
-        size += pb::CodedOutputStream.ComputeInt32Size(15, Dummy15);
-      }
-      if (hasDummy16) {
-        size += pb::CodedOutputStream.ComputeInt32Size(16, Dummy16);
-      }
-      if (hasDummy17) {
-        size += pb::CodedOutputStream.ComputeInt32Size(17, Dummy17);
-      }
-      if (hasDummy18) {
-        size += pb::CodedOutputStream.ComputeInt32Size(18, Dummy18);
-      }
-      if (hasDummy19) {
-        size += pb::CodedOutputStream.ComputeInt32Size(19, Dummy19);
-      }
-      if (hasDummy20) {
-        size += pb::CodedOutputStream.ComputeInt32Size(20, Dummy20);
-      }
-      if (hasDummy21) {
-        size += pb::CodedOutputStream.ComputeInt32Size(21, Dummy21);
-      }
-      if (hasDummy22) {
-        size += pb::CodedOutputStream.ComputeInt32Size(22, Dummy22);
-      }
-      if (hasDummy23) {
-        size += pb::CodedOutputStream.ComputeInt32Size(23, Dummy23);
-      }
-      if (hasDummy24) {
-        size += pb::CodedOutputStream.ComputeInt32Size(24, Dummy24);
-      }
-      if (hasDummy25) {
-        size += pb::CodedOutputStream.ComputeInt32Size(25, Dummy25);
-      }
-      if (hasDummy26) {
-        size += pb::CodedOutputStream.ComputeInt32Size(26, Dummy26);
-      }
-      if (hasDummy27) {
-        size += pb::CodedOutputStream.ComputeInt32Size(27, Dummy27);
-      }
-      if (hasDummy28) {
-        size += pb::CodedOutputStream.ComputeInt32Size(28, Dummy28);
-      }
-      if (hasDummy29) {
-        size += pb::CodedOutputStream.ComputeInt32Size(29, Dummy29);
-      }
-      if (hasDummy30) {
-        size += pb::CodedOutputStream.ComputeInt32Size(30, Dummy30);
-      }
-      if (hasDummy31) {
-        size += pb::CodedOutputStream.ComputeInt32Size(31, Dummy31);
-      }
-      if (hasDummy32) {
-        size += pb::CodedOutputStream.ComputeInt32Size(32, Dummy32);
-      }
-      if (hasC) {
-        size += pb::CodedOutputStream.ComputeInt32Size(33, C);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestRequired ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRequired ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequired ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRequired ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequired ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRequired ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequired ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestRequired ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestRequired ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRequired ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestRequired MakeReadOnly() {
-      return this;
-    }
-
-    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(TestRequired prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestRequired, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestRequired cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestRequired result;
-
-      private TestRequired PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestRequired original = result;
-          result = new TestRequired();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestRequired MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor; }
-      }
-
-      public override TestRequired DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }
-      }
-
-      public override TestRequired BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestRequired) {
-          return MergeFrom((TestRequired) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestRequired other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasA) {
-          A = other.A;
-        }
-        if (other.HasDummy2) {
-          Dummy2 = other.Dummy2;
-        }
-        if (other.HasB) {
-          B = other.B;
-        }
-        if (other.HasDummy4) {
-          Dummy4 = other.Dummy4;
-        }
-        if (other.HasDummy5) {
-          Dummy5 = other.Dummy5;
-        }
-        if (other.HasDummy6) {
-          Dummy6 = other.Dummy6;
-        }
-        if (other.HasDummy7) {
-          Dummy7 = other.Dummy7;
-        }
-        if (other.HasDummy8) {
-          Dummy8 = other.Dummy8;
-        }
-        if (other.HasDummy9) {
-          Dummy9 = other.Dummy9;
-        }
-        if (other.HasDummy10) {
-          Dummy10 = other.Dummy10;
-        }
-        if (other.HasDummy11) {
-          Dummy11 = other.Dummy11;
-        }
-        if (other.HasDummy12) {
-          Dummy12 = other.Dummy12;
-        }
-        if (other.HasDummy13) {
-          Dummy13 = other.Dummy13;
-        }
-        if (other.HasDummy14) {
-          Dummy14 = other.Dummy14;
-        }
-        if (other.HasDummy15) {
-          Dummy15 = other.Dummy15;
-        }
-        if (other.HasDummy16) {
-          Dummy16 = other.Dummy16;
-        }
-        if (other.HasDummy17) {
-          Dummy17 = other.Dummy17;
-        }
-        if (other.HasDummy18) {
-          Dummy18 = other.Dummy18;
-        }
-        if (other.HasDummy19) {
-          Dummy19 = other.Dummy19;
-        }
-        if (other.HasDummy20) {
-          Dummy20 = other.Dummy20;
-        }
-        if (other.HasDummy21) {
-          Dummy21 = other.Dummy21;
-        }
-        if (other.HasDummy22) {
-          Dummy22 = other.Dummy22;
-        }
-        if (other.HasDummy23) {
-          Dummy23 = other.Dummy23;
-        }
-        if (other.HasDummy24) {
-          Dummy24 = other.Dummy24;
-        }
-        if (other.HasDummy25) {
-          Dummy25 = other.Dummy25;
-        }
-        if (other.HasDummy26) {
-          Dummy26 = other.Dummy26;
-        }
-        if (other.HasDummy27) {
-          Dummy27 = other.Dummy27;
-        }
-        if (other.HasDummy28) {
-          Dummy28 = other.Dummy28;
-        }
-        if (other.HasDummy29) {
-          Dummy29 = other.Dummy29;
-        }
-        if (other.HasDummy30) {
-          Dummy30 = other.Dummy30;
-        }
-        if (other.HasDummy31) {
-          Dummy31 = other.Dummy31;
-        }
-        if (other.HasDummy32) {
-          Dummy32 = other.Dummy32;
-        }
-        if (other.HasC) {
-          C = other.C;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testRequiredFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testRequiredFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasA = input.ReadInt32(ref result.a_);
-              break;
-            }
-            case 16: {
-              result.hasDummy2 = input.ReadInt32(ref result.dummy2_);
-              break;
-            }
-            case 24: {
-              result.hasB = input.ReadInt32(ref result.b_);
-              break;
-            }
-            case 32: {
-              result.hasDummy4 = input.ReadInt32(ref result.dummy4_);
-              break;
-            }
-            case 40: {
-              result.hasDummy5 = input.ReadInt32(ref result.dummy5_);
-              break;
-            }
-            case 48: {
-              result.hasDummy6 = input.ReadInt32(ref result.dummy6_);
-              break;
-            }
-            case 56: {
-              result.hasDummy7 = input.ReadInt32(ref result.dummy7_);
-              break;
-            }
-            case 64: {
-              result.hasDummy8 = input.ReadInt32(ref result.dummy8_);
-              break;
-            }
-            case 72: {
-              result.hasDummy9 = input.ReadInt32(ref result.dummy9_);
-              break;
-            }
-            case 80: {
-              result.hasDummy10 = input.ReadInt32(ref result.dummy10_);
-              break;
-            }
-            case 88: {
-              result.hasDummy11 = input.ReadInt32(ref result.dummy11_);
-              break;
-            }
-            case 96: {
-              result.hasDummy12 = input.ReadInt32(ref result.dummy12_);
-              break;
-            }
-            case 104: {
-              result.hasDummy13 = input.ReadInt32(ref result.dummy13_);
-              break;
-            }
-            case 112: {
-              result.hasDummy14 = input.ReadInt32(ref result.dummy14_);
-              break;
-            }
-            case 120: {
-              result.hasDummy15 = input.ReadInt32(ref result.dummy15_);
-              break;
-            }
-            case 128: {
-              result.hasDummy16 = input.ReadInt32(ref result.dummy16_);
-              break;
-            }
-            case 136: {
-              result.hasDummy17 = input.ReadInt32(ref result.dummy17_);
-              break;
-            }
-            case 144: {
-              result.hasDummy18 = input.ReadInt32(ref result.dummy18_);
-              break;
-            }
-            case 152: {
-              result.hasDummy19 = input.ReadInt32(ref result.dummy19_);
-              break;
-            }
-            case 160: {
-              result.hasDummy20 = input.ReadInt32(ref result.dummy20_);
-              break;
-            }
-            case 168: {
-              result.hasDummy21 = input.ReadInt32(ref result.dummy21_);
-              break;
-            }
-            case 176: {
-              result.hasDummy22 = input.ReadInt32(ref result.dummy22_);
-              break;
-            }
-            case 184: {
-              result.hasDummy23 = input.ReadInt32(ref result.dummy23_);
-              break;
-            }
-            case 192: {
-              result.hasDummy24 = input.ReadInt32(ref result.dummy24_);
-              break;
-            }
-            case 200: {
-              result.hasDummy25 = input.ReadInt32(ref result.dummy25_);
-              break;
-            }
-            case 208: {
-              result.hasDummy26 = input.ReadInt32(ref result.dummy26_);
-              break;
-            }
-            case 216: {
-              result.hasDummy27 = input.ReadInt32(ref result.dummy27_);
-              break;
-            }
-            case 224: {
-              result.hasDummy28 = input.ReadInt32(ref result.dummy28_);
-              break;
-            }
-            case 232: {
-              result.hasDummy29 = input.ReadInt32(ref result.dummy29_);
-              break;
-            }
-            case 240: {
-              result.hasDummy30 = input.ReadInt32(ref result.dummy30_);
-              break;
-            }
-            case 248: {
-              result.hasDummy31 = input.ReadInt32(ref result.dummy31_);
-              break;
-            }
-            case 256: {
-              result.hasDummy32 = input.ReadInt32(ref result.dummy32_);
-              break;
-            }
-            case 264: {
-              result.hasC = input.ReadInt32(ref result.c_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasA {
-        get { return result.hasA; }
-      }
-      public int A {
-        get { return result.A; }
-        set { SetA(value); }
-      }
-      public Builder SetA(int value) {
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = value;
-        return this;
-      }
-      public Builder ClearA() {
-        PrepareBuilder();
-        result.hasA = false;
-        result.a_ = 0;
-        return this;
-      }
-
-      public bool HasDummy2 {
-        get { return result.hasDummy2; }
-      }
-      public int Dummy2 {
-        get { return result.Dummy2; }
-        set { SetDummy2(value); }
-      }
-      public Builder SetDummy2(int value) {
-        PrepareBuilder();
-        result.hasDummy2 = true;
-        result.dummy2_ = value;
-        return this;
-      }
-      public Builder ClearDummy2() {
-        PrepareBuilder();
-        result.hasDummy2 = false;
-        result.dummy2_ = 0;
-        return this;
-      }
-
-      public bool HasB {
-        get { return result.hasB; }
-      }
-      public int B {
-        get { return result.B; }
-        set { SetB(value); }
-      }
-      public Builder SetB(int value) {
-        PrepareBuilder();
-        result.hasB = true;
-        result.b_ = value;
-        return this;
-      }
-      public Builder ClearB() {
-        PrepareBuilder();
-        result.hasB = false;
-        result.b_ = 0;
-        return this;
-      }
-
-      public bool HasDummy4 {
-        get { return result.hasDummy4; }
-      }
-      public int Dummy4 {
-        get { return result.Dummy4; }
-        set { SetDummy4(value); }
-      }
-      public Builder SetDummy4(int value) {
-        PrepareBuilder();
-        result.hasDummy4 = true;
-        result.dummy4_ = value;
-        return this;
-      }
-      public Builder ClearDummy4() {
-        PrepareBuilder();
-        result.hasDummy4 = false;
-        result.dummy4_ = 0;
-        return this;
-      }
-
-      public bool HasDummy5 {
-        get { return result.hasDummy5; }
-      }
-      public int Dummy5 {
-        get { return result.Dummy5; }
-        set { SetDummy5(value); }
-      }
-      public Builder SetDummy5(int value) {
-        PrepareBuilder();
-        result.hasDummy5 = true;
-        result.dummy5_ = value;
-        return this;
-      }
-      public Builder ClearDummy5() {
-        PrepareBuilder();
-        result.hasDummy5 = false;
-        result.dummy5_ = 0;
-        return this;
-      }
-
-      public bool HasDummy6 {
-        get { return result.hasDummy6; }
-      }
-      public int Dummy6 {
-        get { return result.Dummy6; }
-        set { SetDummy6(value); }
-      }
-      public Builder SetDummy6(int value) {
-        PrepareBuilder();
-        result.hasDummy6 = true;
-        result.dummy6_ = value;
-        return this;
-      }
-      public Builder ClearDummy6() {
-        PrepareBuilder();
-        result.hasDummy6 = false;
-        result.dummy6_ = 0;
-        return this;
-      }
-
-      public bool HasDummy7 {
-        get { return result.hasDummy7; }
-      }
-      public int Dummy7 {
-        get { return result.Dummy7; }
-        set { SetDummy7(value); }
-      }
-      public Builder SetDummy7(int value) {
-        PrepareBuilder();
-        result.hasDummy7 = true;
-        result.dummy7_ = value;
-        return this;
-      }
-      public Builder ClearDummy7() {
-        PrepareBuilder();
-        result.hasDummy7 = false;
-        result.dummy7_ = 0;
-        return this;
-      }
-
-      public bool HasDummy8 {
-        get { return result.hasDummy8; }
-      }
-      public int Dummy8 {
-        get { return result.Dummy8; }
-        set { SetDummy8(value); }
-      }
-      public Builder SetDummy8(int value) {
-        PrepareBuilder();
-        result.hasDummy8 = true;
-        result.dummy8_ = value;
-        return this;
-      }
-      public Builder ClearDummy8() {
-        PrepareBuilder();
-        result.hasDummy8 = false;
-        result.dummy8_ = 0;
-        return this;
-      }
-
-      public bool HasDummy9 {
-        get { return result.hasDummy9; }
-      }
-      public int Dummy9 {
-        get { return result.Dummy9; }
-        set { SetDummy9(value); }
-      }
-      public Builder SetDummy9(int value) {
-        PrepareBuilder();
-        result.hasDummy9 = true;
-        result.dummy9_ = value;
-        return this;
-      }
-      public Builder ClearDummy9() {
-        PrepareBuilder();
-        result.hasDummy9 = false;
-        result.dummy9_ = 0;
-        return this;
-      }
-
-      public bool HasDummy10 {
-        get { return result.hasDummy10; }
-      }
-      public int Dummy10 {
-        get { return result.Dummy10; }
-        set { SetDummy10(value); }
-      }
-      public Builder SetDummy10(int value) {
-        PrepareBuilder();
-        result.hasDummy10 = true;
-        result.dummy10_ = value;
-        return this;
-      }
-      public Builder ClearDummy10() {
-        PrepareBuilder();
-        result.hasDummy10 = false;
-        result.dummy10_ = 0;
-        return this;
-      }
-
-      public bool HasDummy11 {
-        get { return result.hasDummy11; }
-      }
-      public int Dummy11 {
-        get { return result.Dummy11; }
-        set { SetDummy11(value); }
-      }
-      public Builder SetDummy11(int value) {
-        PrepareBuilder();
-        result.hasDummy11 = true;
-        result.dummy11_ = value;
-        return this;
-      }
-      public Builder ClearDummy11() {
-        PrepareBuilder();
-        result.hasDummy11 = false;
-        result.dummy11_ = 0;
-        return this;
-      }
-
-      public bool HasDummy12 {
-        get { return result.hasDummy12; }
-      }
-      public int Dummy12 {
-        get { return result.Dummy12; }
-        set { SetDummy12(value); }
-      }
-      public Builder SetDummy12(int value) {
-        PrepareBuilder();
-        result.hasDummy12 = true;
-        result.dummy12_ = value;
-        return this;
-      }
-      public Builder ClearDummy12() {
-        PrepareBuilder();
-        result.hasDummy12 = false;
-        result.dummy12_ = 0;
-        return this;
-      }
-
-      public bool HasDummy13 {
-        get { return result.hasDummy13; }
-      }
-      public int Dummy13 {
-        get { return result.Dummy13; }
-        set { SetDummy13(value); }
-      }
-      public Builder SetDummy13(int value) {
-        PrepareBuilder();
-        result.hasDummy13 = true;
-        result.dummy13_ = value;
-        return this;
-      }
-      public Builder ClearDummy13() {
-        PrepareBuilder();
-        result.hasDummy13 = false;
-        result.dummy13_ = 0;
-        return this;
-      }
-
-      public bool HasDummy14 {
-        get { return result.hasDummy14; }
-      }
-      public int Dummy14 {
-        get { return result.Dummy14; }
-        set { SetDummy14(value); }
-      }
-      public Builder SetDummy14(int value) {
-        PrepareBuilder();
-        result.hasDummy14 = true;
-        result.dummy14_ = value;
-        return this;
-      }
-      public Builder ClearDummy14() {
-        PrepareBuilder();
-        result.hasDummy14 = false;
-        result.dummy14_ = 0;
-        return this;
-      }
-
-      public bool HasDummy15 {
-        get { return result.hasDummy15; }
-      }
-      public int Dummy15 {
-        get { return result.Dummy15; }
-        set { SetDummy15(value); }
-      }
-      public Builder SetDummy15(int value) {
-        PrepareBuilder();
-        result.hasDummy15 = true;
-        result.dummy15_ = value;
-        return this;
-      }
-      public Builder ClearDummy15() {
-        PrepareBuilder();
-        result.hasDummy15 = false;
-        result.dummy15_ = 0;
-        return this;
-      }
-
-      public bool HasDummy16 {
-        get { return result.hasDummy16; }
-      }
-      public int Dummy16 {
-        get { return result.Dummy16; }
-        set { SetDummy16(value); }
-      }
-      public Builder SetDummy16(int value) {
-        PrepareBuilder();
-        result.hasDummy16 = true;
-        result.dummy16_ = value;
-        return this;
-      }
-      public Builder ClearDummy16() {
-        PrepareBuilder();
-        result.hasDummy16 = false;
-        result.dummy16_ = 0;
-        return this;
-      }
-
-      public bool HasDummy17 {
-        get { return result.hasDummy17; }
-      }
-      public int Dummy17 {
-        get { return result.Dummy17; }
-        set { SetDummy17(value); }
-      }
-      public Builder SetDummy17(int value) {
-        PrepareBuilder();
-        result.hasDummy17 = true;
-        result.dummy17_ = value;
-        return this;
-      }
-      public Builder ClearDummy17() {
-        PrepareBuilder();
-        result.hasDummy17 = false;
-        result.dummy17_ = 0;
-        return this;
-      }
-
-      public bool HasDummy18 {
-        get { return result.hasDummy18; }
-      }
-      public int Dummy18 {
-        get { return result.Dummy18; }
-        set { SetDummy18(value); }
-      }
-      public Builder SetDummy18(int value) {
-        PrepareBuilder();
-        result.hasDummy18 = true;
-        result.dummy18_ = value;
-        return this;
-      }
-      public Builder ClearDummy18() {
-        PrepareBuilder();
-        result.hasDummy18 = false;
-        result.dummy18_ = 0;
-        return this;
-      }
-
-      public bool HasDummy19 {
-        get { return result.hasDummy19; }
-      }
-      public int Dummy19 {
-        get { return result.Dummy19; }
-        set { SetDummy19(value); }
-      }
-      public Builder SetDummy19(int value) {
-        PrepareBuilder();
-        result.hasDummy19 = true;
-        result.dummy19_ = value;
-        return this;
-      }
-      public Builder ClearDummy19() {
-        PrepareBuilder();
-        result.hasDummy19 = false;
-        result.dummy19_ = 0;
-        return this;
-      }
-
-      public bool HasDummy20 {
-        get { return result.hasDummy20; }
-      }
-      public int Dummy20 {
-        get { return result.Dummy20; }
-        set { SetDummy20(value); }
-      }
-      public Builder SetDummy20(int value) {
-        PrepareBuilder();
-        result.hasDummy20 = true;
-        result.dummy20_ = value;
-        return this;
-      }
-      public Builder ClearDummy20() {
-        PrepareBuilder();
-        result.hasDummy20 = false;
-        result.dummy20_ = 0;
-        return this;
-      }
-
-      public bool HasDummy21 {
-        get { return result.hasDummy21; }
-      }
-      public int Dummy21 {
-        get { return result.Dummy21; }
-        set { SetDummy21(value); }
-      }
-      public Builder SetDummy21(int value) {
-        PrepareBuilder();
-        result.hasDummy21 = true;
-        result.dummy21_ = value;
-        return this;
-      }
-      public Builder ClearDummy21() {
-        PrepareBuilder();
-        result.hasDummy21 = false;
-        result.dummy21_ = 0;
-        return this;
-      }
-
-      public bool HasDummy22 {
-        get { return result.hasDummy22; }
-      }
-      public int Dummy22 {
-        get { return result.Dummy22; }
-        set { SetDummy22(value); }
-      }
-      public Builder SetDummy22(int value) {
-        PrepareBuilder();
-        result.hasDummy22 = true;
-        result.dummy22_ = value;
-        return this;
-      }
-      public Builder ClearDummy22() {
-        PrepareBuilder();
-        result.hasDummy22 = false;
-        result.dummy22_ = 0;
-        return this;
-      }
-
-      public bool HasDummy23 {
-        get { return result.hasDummy23; }
-      }
-      public int Dummy23 {
-        get { return result.Dummy23; }
-        set { SetDummy23(value); }
-      }
-      public Builder SetDummy23(int value) {
-        PrepareBuilder();
-        result.hasDummy23 = true;
-        result.dummy23_ = value;
-        return this;
-      }
-      public Builder ClearDummy23() {
-        PrepareBuilder();
-        result.hasDummy23 = false;
-        result.dummy23_ = 0;
-        return this;
-      }
-
-      public bool HasDummy24 {
-        get { return result.hasDummy24; }
-      }
-      public int Dummy24 {
-        get { return result.Dummy24; }
-        set { SetDummy24(value); }
-      }
-      public Builder SetDummy24(int value) {
-        PrepareBuilder();
-        result.hasDummy24 = true;
-        result.dummy24_ = value;
-        return this;
-      }
-      public Builder ClearDummy24() {
-        PrepareBuilder();
-        result.hasDummy24 = false;
-        result.dummy24_ = 0;
-        return this;
-      }
-
-      public bool HasDummy25 {
-        get { return result.hasDummy25; }
-      }
-      public int Dummy25 {
-        get { return result.Dummy25; }
-        set { SetDummy25(value); }
-      }
-      public Builder SetDummy25(int value) {
-        PrepareBuilder();
-        result.hasDummy25 = true;
-        result.dummy25_ = value;
-        return this;
-      }
-      public Builder ClearDummy25() {
-        PrepareBuilder();
-        result.hasDummy25 = false;
-        result.dummy25_ = 0;
-        return this;
-      }
-
-      public bool HasDummy26 {
-        get { return result.hasDummy26; }
-      }
-      public int Dummy26 {
-        get { return result.Dummy26; }
-        set { SetDummy26(value); }
-      }
-      public Builder SetDummy26(int value) {
-        PrepareBuilder();
-        result.hasDummy26 = true;
-        result.dummy26_ = value;
-        return this;
-      }
-      public Builder ClearDummy26() {
-        PrepareBuilder();
-        result.hasDummy26 = false;
-        result.dummy26_ = 0;
-        return this;
-      }
-
-      public bool HasDummy27 {
-        get { return result.hasDummy27; }
-      }
-      public int Dummy27 {
-        get { return result.Dummy27; }
-        set { SetDummy27(value); }
-      }
-      public Builder SetDummy27(int value) {
-        PrepareBuilder();
-        result.hasDummy27 = true;
-        result.dummy27_ = value;
-        return this;
-      }
-      public Builder ClearDummy27() {
-        PrepareBuilder();
-        result.hasDummy27 = false;
-        result.dummy27_ = 0;
-        return this;
-      }
-
-      public bool HasDummy28 {
-        get { return result.hasDummy28; }
-      }
-      public int Dummy28 {
-        get { return result.Dummy28; }
-        set { SetDummy28(value); }
-      }
-      public Builder SetDummy28(int value) {
-        PrepareBuilder();
-        result.hasDummy28 = true;
-        result.dummy28_ = value;
-        return this;
-      }
-      public Builder ClearDummy28() {
-        PrepareBuilder();
-        result.hasDummy28 = false;
-        result.dummy28_ = 0;
-        return this;
-      }
-
-      public bool HasDummy29 {
-        get { return result.hasDummy29; }
-      }
-      public int Dummy29 {
-        get { return result.Dummy29; }
-        set { SetDummy29(value); }
-      }
-      public Builder SetDummy29(int value) {
-        PrepareBuilder();
-        result.hasDummy29 = true;
-        result.dummy29_ = value;
-        return this;
-      }
-      public Builder ClearDummy29() {
-        PrepareBuilder();
-        result.hasDummy29 = false;
-        result.dummy29_ = 0;
-        return this;
-      }
-
-      public bool HasDummy30 {
-        get { return result.hasDummy30; }
-      }
-      public int Dummy30 {
-        get { return result.Dummy30; }
-        set { SetDummy30(value); }
-      }
-      public Builder SetDummy30(int value) {
-        PrepareBuilder();
-        result.hasDummy30 = true;
-        result.dummy30_ = value;
-        return this;
-      }
-      public Builder ClearDummy30() {
-        PrepareBuilder();
-        result.hasDummy30 = false;
-        result.dummy30_ = 0;
-        return this;
-      }
-
-      public bool HasDummy31 {
-        get { return result.hasDummy31; }
-      }
-      public int Dummy31 {
-        get { return result.Dummy31; }
-        set { SetDummy31(value); }
-      }
-      public Builder SetDummy31(int value) {
-        PrepareBuilder();
-        result.hasDummy31 = true;
-        result.dummy31_ = value;
-        return this;
-      }
-      public Builder ClearDummy31() {
-        PrepareBuilder();
-        result.hasDummy31 = false;
-        result.dummy31_ = 0;
-        return this;
-      }
-
-      public bool HasDummy32 {
-        get { return result.hasDummy32; }
-      }
-      public int Dummy32 {
-        get { return result.Dummy32; }
-        set { SetDummy32(value); }
-      }
-      public Builder SetDummy32(int value) {
-        PrepareBuilder();
-        result.hasDummy32 = true;
-        result.dummy32_ = value;
-        return this;
-      }
-      public Builder ClearDummy32() {
-        PrepareBuilder();
-        result.hasDummy32 = false;
-        result.dummy32_ = 0;
-        return this;
-      }
-
-      public bool HasC {
-        get { return result.hasC; }
-      }
-      public int C {
-        get { return result.C; }
-        set { SetC(value); }
-      }
-      public Builder SetC(int value) {
-        PrepareBuilder();
-        result.hasC = true;
-        result.c_ = value;
-        return this;
-      }
-      public Builder ClearC() {
-        PrepareBuilder();
-        result.hasC = false;
-        result.c_ = 0;
-        return this;
-      }
-    }
-    static TestRequired() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestRequiredForeign : pb::GeneratedMessage<TestRequiredForeign, TestRequiredForeign.Builder> {
-    private TestRequiredForeign() { }
-    private static readonly TestRequiredForeign defaultInstance = new TestRequiredForeign().MakeReadOnly();
-    private static readonly string[] _testRequiredForeignFieldNames = new string[] { "dummy", "optional_message", "repeated_message" };
-    private static readonly uint[] _testRequiredForeignFieldTags = new uint[] { 24, 10, 18 };
-    public static TestRequiredForeign DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestRequiredForeign DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestRequiredForeign ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRequiredForeign__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestRequiredForeign, TestRequiredForeign.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable; }
-    }
-
-    public const int OptionalMessageFieldNumber = 1;
-    private bool hasOptionalMessage;
-    private global::Google.ProtocolBuffers.TestProtos.TestRequired optionalMessage_;
-    public bool HasOptionalMessage {
-      get { return hasOptionalMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestRequired OptionalMessage {
-      get { return optionalMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }
-    }
-
-    public const int RepeatedMessageFieldNumber = 2;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired> repeatedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestRequired> RepeatedMessageList {
-      get { return repeatedMessage_; }
-    }
-    public int RepeatedMessageCount {
-      get { return repeatedMessage_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestRequired GetRepeatedMessage(int index) {
-      return repeatedMessage_[index];
-    }
-
-    public const int DummyFieldNumber = 3;
-    private bool hasDummy;
-    private int dummy_;
-    public bool HasDummy {
-      get { return hasDummy; }
-    }
-    public int Dummy {
-      get { return dummy_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (HasOptionalMessage) {
-          if (!OptionalMessage.IsInitialized) return false;
-        }
-        foreach (global::Google.ProtocolBuffers.TestProtos.TestRequired element in RepeatedMessageList) {
-          if (!element.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testRequiredForeignFieldNames;
-      if (hasOptionalMessage) {
-        output.WriteMessage(1, field_names[1], OptionalMessage);
-      }
-      if (repeatedMessage_.Count > 0) {
-        output.WriteMessageArray(2, field_names[2], repeatedMessage_);
-      }
-      if (hasDummy) {
-        output.WriteInt32(3, field_names[0], Dummy);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasOptionalMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalMessage);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.TestRequired element in RepeatedMessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(2, element);
-      }
-      if (hasDummy) {
-        size += pb::CodedOutputStream.ComputeInt32Size(3, Dummy);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestRequiredForeign ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRequiredForeign ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredForeign ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRequiredForeign ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredForeign ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRequiredForeign ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredForeign ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestRequiredForeign ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestRequiredForeign ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRequiredForeign ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestRequiredForeign MakeReadOnly() {
-      repeatedMessage_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestRequiredForeign prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestRequiredForeign, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestRequiredForeign cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestRequiredForeign result;
-
-      private TestRequiredForeign PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestRequiredForeign original = result;
-          result = new TestRequiredForeign();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestRequiredForeign MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Descriptor; }
-      }
-
-      public override TestRequiredForeign DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.DefaultInstance; }
-      }
-
-      public override TestRequiredForeign BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestRequiredForeign) {
-          return MergeFrom((TestRequiredForeign) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestRequiredForeign other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasOptionalMessage) {
-          MergeOptionalMessage(other.OptionalMessage);
-        }
-        if (other.repeatedMessage_.Count != 0) {
-          result.repeatedMessage_.Add(other.repeatedMessage_);
-        }
-        if (other.HasDummy) {
-          Dummy = other.Dummy;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testRequiredForeignFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testRequiredForeignFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder();
-              if (result.hasOptionalMessage) {
-                subBuilder.MergeFrom(OptionalMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 18: {
-              input.ReadMessageArray(tag, field_name, result.repeatedMessage_, global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 24: {
-              result.hasDummy = input.ReadInt32(ref result.dummy_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasOptionalMessage {
-       get { return result.hasOptionalMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestRequired OptionalMessage {
-        get { return result.OptionalMessage; }
-        set { SetOptionalMessage(value); }
-      }
-      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalMessage = true;
-        result.optionalMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalMessage = true;
-        result.optionalMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalMessage &&
-            result.optionalMessage_ != global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) {
-            result.optionalMessage_ = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder(result.optionalMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalMessage_ = value;
-        }
-        result.hasOptionalMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalMessage() {
-        PrepareBuilder();
-        result.hasOptionalMessage = false;
-        result.optionalMessage_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired> RepeatedMessageList {
-        get { return PrepareBuilder().repeatedMessage_; }
-      }
-      public int RepeatedMessageCount {
-        get { return result.RepeatedMessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestRequired GetRepeatedMessage(int index) {
-        return result.GetRepeatedMessage(index);
-      }
-      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedMessage_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedMessage_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedMessage_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedMessage_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestRequired> values) {
-        PrepareBuilder();
-        result.repeatedMessage_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedMessage() {
-        PrepareBuilder();
-        result.repeatedMessage_.Clear();
-        return this;
-      }
-
-      public bool HasDummy {
-        get { return result.hasDummy; }
-      }
-      public int Dummy {
-        get { return result.Dummy; }
-        set { SetDummy(value); }
-      }
-      public Builder SetDummy(int value) {
-        PrepareBuilder();
-        result.hasDummy = true;
-        result.dummy_ = value;
-        return this;
-      }
-      public Builder ClearDummy() {
-        PrepareBuilder();
-        result.hasDummy = false;
-        result.dummy_ = 0;
-        return this;
-      }
-    }
-    static TestRequiredForeign() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestForeignNested : pb::GeneratedMessage<TestForeignNested, TestForeignNested.Builder> {
-    private TestForeignNested() { }
-    private static readonly TestForeignNested defaultInstance = new TestForeignNested().MakeReadOnly();
-    private static readonly string[] _testForeignNestedFieldNames = new string[] { "foreign_nested" };
-    private static readonly uint[] _testForeignNestedFieldTags = new uint[] { 10 };
-    public static TestForeignNested DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestForeignNested DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestForeignNested ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestForeignNested__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestForeignNested, TestForeignNested.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable; }
-    }
-
-    public const int ForeignNestedFieldNumber = 1;
-    private bool hasForeignNested;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage foreignNested_;
-    public bool HasForeignNested {
-      get { return hasForeignNested; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {
-      get { return foreignNested_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testForeignNestedFieldNames;
-      if (hasForeignNested) {
-        output.WriteMessage(1, field_names[0], ForeignNested);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasForeignNested) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, ForeignNested);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestForeignNested ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestForeignNested ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestForeignNested ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestForeignNested ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestForeignNested ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestForeignNested ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestForeignNested ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestForeignNested ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestForeignNested ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestForeignNested ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestForeignNested MakeReadOnly() {
-      return this;
-    }
-
-    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(TestForeignNested prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestForeignNested, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestForeignNested cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestForeignNested result;
-
-      private TestForeignNested PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestForeignNested original = result;
-          result = new TestForeignNested();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestForeignNested MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Descriptor; }
-      }
-
-      public override TestForeignNested DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestForeignNested.DefaultInstance; }
-      }
-
-      public override TestForeignNested BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestForeignNested) {
-          return MergeFrom((TestForeignNested) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestForeignNested other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestForeignNested.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasForeignNested) {
-          MergeForeignNested(other.ForeignNested);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testForeignNestedFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testForeignNestedFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();
-              if (result.hasForeignNested) {
-                subBuilder.MergeFrom(ForeignNested);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              ForeignNested = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasForeignNested {
-       get { return result.hasForeignNested; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {
-        get { return result.ForeignNested; }
-        set { SetForeignNested(value); }
-      }
-      public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasForeignNested = true;
-        result.foreignNested_ = value;
-        return this;
-      }
-      public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasForeignNested = true;
-        result.foreignNested_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasForeignNested &&
-            result.foreignNested_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {
-            result.foreignNested_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.foreignNested_).MergeFrom(value).BuildPartial();
-        } else {
-          result.foreignNested_ = value;
-        }
-        result.hasForeignNested = true;
-        return this;
-      }
-      public Builder ClearForeignNested() {
-        PrepareBuilder();
-        result.hasForeignNested = false;
-        result.foreignNested_ = null;
-        return this;
-      }
-    }
-    static TestForeignNested() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestEmptyMessage : pb::GeneratedMessage<TestEmptyMessage, TestEmptyMessage.Builder> {
-    private TestEmptyMessage() { }
-    private static readonly TestEmptyMessage defaultInstance = new TestEmptyMessage().MakeReadOnly();
-    private static readonly string[] _testEmptyMessageFieldNames = new string[] {  };
-    private static readonly uint[] _testEmptyMessageFieldTags = new uint[] {  };
-    public static TestEmptyMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestEmptyMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestEmptyMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestEmptyMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestEmptyMessage, TestEmptyMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testEmptyMessageFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestEmptyMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestEmptyMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestEmptyMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestEmptyMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestEmptyMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestEmptyMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestEmptyMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestEmptyMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestEmptyMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestEmptyMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestEmptyMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(TestEmptyMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestEmptyMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestEmptyMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestEmptyMessage result;
-
-      private TestEmptyMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestEmptyMessage original = result;
-          result = new TestEmptyMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestEmptyMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Descriptor; }
-      }
-
-      public override TestEmptyMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.DefaultInstance; }
-      }
-
-      public override TestEmptyMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestEmptyMessage) {
-          return MergeFrom((TestEmptyMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestEmptyMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testEmptyMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestEmptyMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestEmptyMessageWithExtensions : pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder> {
-    private TestEmptyMessageWithExtensions() { }
-    private static readonly TestEmptyMessageWithExtensions defaultInstance = new TestEmptyMessageWithExtensions().MakeReadOnly();
-    private static readonly string[] _testEmptyMessageWithExtensionsFieldNames = new string[] {  };
-    private static readonly uint[] _testEmptyMessageWithExtensionsFieldTags = new uint[] {  };
-    public static TestEmptyMessageWithExtensions DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestEmptyMessageWithExtensions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestEmptyMessageWithExtensions ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testEmptyMessageWithExtensionsFieldNames;
-      pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestEmptyMessageWithExtensions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestEmptyMessageWithExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestEmptyMessageWithExtensions MakeReadOnly() {
-      return this;
-    }
-
-    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(TestEmptyMessageWithExtensions prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestEmptyMessageWithExtensions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestEmptyMessageWithExtensions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestEmptyMessageWithExtensions result;
-
-      private TestEmptyMessageWithExtensions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestEmptyMessageWithExtensions original = result;
-          result = new TestEmptyMessageWithExtensions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestEmptyMessageWithExtensions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Descriptor; }
-      }
-
-      public override TestEmptyMessageWithExtensions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.DefaultInstance; }
-      }
-
-      public override TestEmptyMessageWithExtensions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestEmptyMessageWithExtensions) {
-          return MergeFrom((TestEmptyMessageWithExtensions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestEmptyMessageWithExtensions other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.DefaultInstance) return this;
-        PrepareBuilder();
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageWithExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testEmptyMessageWithExtensionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestEmptyMessageWithExtensions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestMultipleExtensionRanges : pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder> {
-    private TestMultipleExtensionRanges() { }
-    private static readonly TestMultipleExtensionRanges defaultInstance = new TestMultipleExtensionRanges().MakeReadOnly();
-    private static readonly string[] _testMultipleExtensionRangesFieldNames = new string[] {  };
-    private static readonly uint[] _testMultipleExtensionRangesFieldTags = new uint[] {  };
-    public static TestMultipleExtensionRanges DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestMultipleExtensionRanges DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestMultipleExtensionRanges ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testMultipleExtensionRangesFieldNames;
-      pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      extensionWriter.WriteUntil(43, output);
-      extensionWriter.WriteUntil(4244, output);
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestMultipleExtensionRanges ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMultipleExtensionRanges ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestMultipleExtensionRanges MakeReadOnly() {
-      return this;
-    }
-
-    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(TestMultipleExtensionRanges prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestMultipleExtensionRanges, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestMultipleExtensionRanges cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestMultipleExtensionRanges result;
-
-      private TestMultipleExtensionRanges PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestMultipleExtensionRanges original = result;
-          result = new TestMultipleExtensionRanges();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestMultipleExtensionRanges MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Descriptor; }
-      }
-
-      public override TestMultipleExtensionRanges DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.DefaultInstance; }
-      }
-
-      public override TestMultipleExtensionRanges BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestMultipleExtensionRanges) {
-          return MergeFrom((TestMultipleExtensionRanges) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestMultipleExtensionRanges other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.DefaultInstance) return this;
-        PrepareBuilder();
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testMultipleExtensionRangesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testMultipleExtensionRangesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestMultipleExtensionRanges() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestReallyLargeTagNumber : pb::GeneratedMessage<TestReallyLargeTagNumber, TestReallyLargeTagNumber.Builder> {
-    private TestReallyLargeTagNumber() { }
-    private static readonly TestReallyLargeTagNumber defaultInstance = new TestReallyLargeTagNumber().MakeReadOnly();
-    private static readonly string[] _testReallyLargeTagNumberFieldNames = new string[] { "a", "bb" };
-    private static readonly uint[] _testReallyLargeTagNumberFieldTags = new uint[] { 8, 2147483640 };
-    public static TestReallyLargeTagNumber DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestReallyLargeTagNumber DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestReallyLargeTagNumber ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestReallyLargeTagNumber, TestReallyLargeTagNumber.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable; }
-    }
-
-    public const int AFieldNumber = 1;
-    private bool hasA;
-    private int a_;
-    public bool HasA {
-      get { return hasA; }
-    }
-    public int A {
-      get { return a_; }
-    }
-
-    public const int BbFieldNumber = 268435455;
-    private bool hasBb;
-    private int bb_;
-    public bool HasBb {
-      get { return hasBb; }
-    }
-    public int Bb {
-      get { return bb_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testReallyLargeTagNumberFieldNames;
-      if (hasA) {
-        output.WriteInt32(1, field_names[0], A);
-      }
-      if (hasBb) {
-        output.WriteInt32(268435455, field_names[1], Bb);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasA) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, A);
-      }
-      if (hasBb) {
-        size += pb::CodedOutputStream.ComputeInt32Size(268435455, Bb);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestReallyLargeTagNumber ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestReallyLargeTagNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestReallyLargeTagNumber MakeReadOnly() {
-      return this;
-    }
-
-    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(TestReallyLargeTagNumber prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestReallyLargeTagNumber, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestReallyLargeTagNumber cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestReallyLargeTagNumber result;
-
-      private TestReallyLargeTagNumber PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestReallyLargeTagNumber original = result;
-          result = new TestReallyLargeTagNumber();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestReallyLargeTagNumber MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Descriptor; }
-      }
-
-      public override TestReallyLargeTagNumber DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.DefaultInstance; }
-      }
-
-      public override TestReallyLargeTagNumber BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestReallyLargeTagNumber) {
-          return MergeFrom((TestReallyLargeTagNumber) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestReallyLargeTagNumber other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasA) {
-          A = other.A;
-        }
-        if (other.HasBb) {
-          Bb = other.Bb;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testReallyLargeTagNumberFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testReallyLargeTagNumberFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasA = input.ReadInt32(ref result.a_);
-              break;
-            }
-            case 2147483640: {
-              result.hasBb = input.ReadInt32(ref result.bb_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasA {
-        get { return result.hasA; }
-      }
-      public int A {
-        get { return result.A; }
-        set { SetA(value); }
-      }
-      public Builder SetA(int value) {
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = value;
-        return this;
-      }
-      public Builder ClearA() {
-        PrepareBuilder();
-        result.hasA = false;
-        result.a_ = 0;
-        return this;
-      }
-
-      public bool HasBb {
-        get { return result.hasBb; }
-      }
-      public int Bb {
-        get { return result.Bb; }
-        set { SetBb(value); }
-      }
-      public Builder SetBb(int value) {
-        PrepareBuilder();
-        result.hasBb = true;
-        result.bb_ = value;
-        return this;
-      }
-      public Builder ClearBb() {
-        PrepareBuilder();
-        result.hasBb = false;
-        result.bb_ = 0;
-        return this;
-      }
-    }
-    static TestReallyLargeTagNumber() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestRecursiveMessage : pb::GeneratedMessage<TestRecursiveMessage, TestRecursiveMessage.Builder> {
-    private TestRecursiveMessage() { }
-    private static readonly TestRecursiveMessage defaultInstance = new TestRecursiveMessage().MakeReadOnly();
-    private static readonly string[] _testRecursiveMessageFieldNames = new string[] { "a", "i" };
-    private static readonly uint[] _testRecursiveMessageFieldTags = new uint[] { 10, 16 };
-    public static TestRecursiveMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestRecursiveMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestRecursiveMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestRecursiveMessage, TestRecursiveMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable; }
-    }
-
-    public const int AFieldNumber = 1;
-    private bool hasA;
-    private global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage a_;
-    public bool HasA {
-      get { return hasA; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage A {
-      get { return a_ ?? global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance; }
-    }
-
-    public const int IFieldNumber = 2;
-    private bool hasI;
-    private int i_;
-    public bool HasI {
-      get { return hasI; }
-    }
-    public int I {
-      get { return i_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testRecursiveMessageFieldNames;
-      if (hasA) {
-        output.WriteMessage(1, field_names[0], A);
-      }
-      if (hasI) {
-        output.WriteInt32(2, field_names[1], I);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasA) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, A);
-      }
-      if (hasI) {
-        size += pb::CodedOutputStream.ComputeInt32Size(2, I);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestRecursiveMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRecursiveMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestRecursiveMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(TestRecursiveMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestRecursiveMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestRecursiveMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestRecursiveMessage result;
-
-      private TestRecursiveMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestRecursiveMessage original = result;
-          result = new TestRecursiveMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestRecursiveMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Descriptor; }
-      }
-
-      public override TestRecursiveMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance; }
-      }
-
-      public override TestRecursiveMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestRecursiveMessage) {
-          return MergeFrom((TestRecursiveMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestRecursiveMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasA) {
-          MergeA(other.A);
-        }
-        if (other.HasI) {
-          I = other.I;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testRecursiveMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testRecursiveMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder();
-              if (result.hasA) {
-                subBuilder.MergeFrom(A);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              A = subBuilder.BuildPartial();
-              break;
-            }
-            case 16: {
-              result.hasI = input.ReadInt32(ref result.i_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasA {
-       get { return result.hasA; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage A {
-        get { return result.A; }
-        set { SetA(value); }
-      }
-      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = value;
-        return this;
-      }
-      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasA &&
-            result.a_ != global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) {
-            result.a_ = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder(result.a_).MergeFrom(value).BuildPartial();
-        } else {
-          result.a_ = value;
-        }
-        result.hasA = true;
-        return this;
-      }
-      public Builder ClearA() {
-        PrepareBuilder();
-        result.hasA = false;
-        result.a_ = null;
-        return this;
-      }
-
-      public bool HasI {
-        get { return result.hasI; }
-      }
-      public int I {
-        get { return result.I; }
-        set { SetI(value); }
-      }
-      public Builder SetI(int value) {
-        PrepareBuilder();
-        result.hasI = true;
-        result.i_ = value;
-        return this;
-      }
-      public Builder ClearI() {
-        PrepareBuilder();
-        result.hasI = false;
-        result.i_ = 0;
-        return this;
-      }
-    }
-    static TestRecursiveMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestMutualRecursionA : pb::GeneratedMessage<TestMutualRecursionA, TestMutualRecursionA.Builder> {
-    private TestMutualRecursionA() { }
-    private static readonly TestMutualRecursionA defaultInstance = new TestMutualRecursionA().MakeReadOnly();
-    private static readonly string[] _testMutualRecursionAFieldNames = new string[] { "bb" };
-    private static readonly uint[] _testMutualRecursionAFieldTags = new uint[] { 10 };
-    public static TestMutualRecursionA DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestMutualRecursionA DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestMutualRecursionA ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestMutualRecursionA, TestMutualRecursionA.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable; }
-    }
-
-    public const int BbFieldNumber = 1;
-    private bool hasBb;
-    private global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB bb_;
-    public bool HasBb {
-      get { return hasBb; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB Bb {
-      get { return bb_ ?? global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testMutualRecursionAFieldNames;
-      if (hasBb) {
-        output.WriteMessage(1, field_names[0], Bb);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasBb) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, Bb);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestMutualRecursionA ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMutualRecursionA ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestMutualRecursionA MakeReadOnly() {
-      return this;
-    }
-
-    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(TestMutualRecursionA prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestMutualRecursionA, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestMutualRecursionA cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestMutualRecursionA result;
-
-      private TestMutualRecursionA PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestMutualRecursionA original = result;
-          result = new TestMutualRecursionA();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestMutualRecursionA MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Descriptor; }
-      }
-
-      public override TestMutualRecursionA DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance; }
-      }
-
-      public override TestMutualRecursionA BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestMutualRecursionA) {
-          return MergeFrom((TestMutualRecursionA) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestMutualRecursionA other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasBb) {
-          MergeBb(other.Bb);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testMutualRecursionAFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testMutualRecursionAFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder();
-              if (result.hasBb) {
-                subBuilder.MergeFrom(Bb);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Bb = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasBb {
-       get { return result.hasBb; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB Bb {
-        get { return result.Bb; }
-        set { SetBb(value); }
-      }
-      public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasBb = true;
-        result.bb_ = value;
-        return this;
-      }
-      public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasBb = true;
-        result.bb_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasBb &&
-            result.bb_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) {
-            result.bb_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder(result.bb_).MergeFrom(value).BuildPartial();
-        } else {
-          result.bb_ = value;
-        }
-        result.hasBb = true;
-        return this;
-      }
-      public Builder ClearBb() {
-        PrepareBuilder();
-        result.hasBb = false;
-        result.bb_ = null;
-        return this;
-      }
-    }
-    static TestMutualRecursionA() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestMutualRecursionB : pb::GeneratedMessage<TestMutualRecursionB, TestMutualRecursionB.Builder> {
-    private TestMutualRecursionB() { }
-    private static readonly TestMutualRecursionB defaultInstance = new TestMutualRecursionB().MakeReadOnly();
-    private static readonly string[] _testMutualRecursionBFieldNames = new string[] { "a", "optional_int32" };
-    private static readonly uint[] _testMutualRecursionBFieldTags = new uint[] { 10, 16 };
-    public static TestMutualRecursionB DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestMutualRecursionB DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestMutualRecursionB ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestMutualRecursionB, TestMutualRecursionB.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable; }
-    }
-
-    public const int AFieldNumber = 1;
-    private bool hasA;
-    private global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA a_;
-    public bool HasA {
-      get { return hasA; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA A {
-      get { return a_ ?? global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance; }
-    }
-
-    public const int OptionalInt32FieldNumber = 2;
-    private bool hasOptionalInt32;
-    private int optionalInt32_;
-    public bool HasOptionalInt32 {
-      get { return hasOptionalInt32; }
-    }
-    public int OptionalInt32 {
-      get { return optionalInt32_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testMutualRecursionBFieldNames;
-      if (hasA) {
-        output.WriteMessage(1, field_names[0], A);
-      }
-      if (hasOptionalInt32) {
-        output.WriteInt32(2, field_names[1], OptionalInt32);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasA) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, A);
-      }
-      if (hasOptionalInt32) {
-        size += pb::CodedOutputStream.ComputeInt32Size(2, OptionalInt32);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestMutualRecursionB ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMutualRecursionB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestMutualRecursionB MakeReadOnly() {
-      return this;
-    }
-
-    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(TestMutualRecursionB prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestMutualRecursionB, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestMutualRecursionB cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestMutualRecursionB result;
-
-      private TestMutualRecursionB PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestMutualRecursionB original = result;
-          result = new TestMutualRecursionB();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestMutualRecursionB MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Descriptor; }
-      }
-
-      public override TestMutualRecursionB DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance; }
-      }
-
-      public override TestMutualRecursionB BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestMutualRecursionB) {
-          return MergeFrom((TestMutualRecursionB) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestMutualRecursionB other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasA) {
-          MergeA(other.A);
-        }
-        if (other.HasOptionalInt32) {
-          OptionalInt32 = other.OptionalInt32;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testMutualRecursionBFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testMutualRecursionBFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder();
-              if (result.hasA) {
-                subBuilder.MergeFrom(A);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              A = subBuilder.BuildPartial();
-              break;
-            }
-            case 16: {
-              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasA {
-       get { return result.hasA; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA A {
-        get { return result.A; }
-        set { SetA(value); }
-      }
-      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = value;
-        return this;
-      }
-      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasA &&
-            result.a_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) {
-            result.a_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder(result.a_).MergeFrom(value).BuildPartial();
-        } else {
-          result.a_ = value;
-        }
-        result.hasA = true;
-        return this;
-      }
-      public Builder ClearA() {
-        PrepareBuilder();
-        result.hasA = false;
-        result.a_ = null;
-        return this;
-      }
-
-      public bool HasOptionalInt32 {
-        get { return result.hasOptionalInt32; }
-      }
-      public int OptionalInt32 {
-        get { return result.OptionalInt32; }
-        set { SetOptionalInt32(value); }
-      }
-      public Builder SetOptionalInt32(int value) {
-        PrepareBuilder();
-        result.hasOptionalInt32 = true;
-        result.optionalInt32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalInt32() {
-        PrepareBuilder();
-        result.hasOptionalInt32 = false;
-        result.optionalInt32_ = 0;
-        return this;
-      }
-    }
-    static TestMutualRecursionB() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestDupFieldNumber : pb::GeneratedMessage<TestDupFieldNumber, TestDupFieldNumber.Builder> {
-    private TestDupFieldNumber() { }
-    private static readonly TestDupFieldNumber defaultInstance = new TestDupFieldNumber().MakeReadOnly();
-    private static readonly string[] _testDupFieldNumberFieldNames = new string[] { "a", "bar", "foo" };
-    private static readonly uint[] _testDupFieldNumberFieldTags = new uint[] { 8, 27, 19 };
-    public static TestDupFieldNumber DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestDupFieldNumber DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestDupFieldNumber ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestDupFieldNumber, TestDupFieldNumber.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Foo : pb::GeneratedMessage<Foo, Foo.Builder> {
-        private Foo() { }
-        private static readonly Foo defaultInstance = new Foo().MakeReadOnly();
-        private static readonly string[] _fooFieldNames = new string[] { "a" };
-        private static readonly uint[] _fooFieldTags = new uint[] { 8 };
-        public static Foo DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override Foo DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override Foo ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<Foo, Foo.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable; }
-        }
-
-        public const int AFieldNumber = 1;
-        private bool hasA;
-        private int a_;
-        public bool HasA {
-          get { return hasA; }
-        }
-        public int A {
-          get { return a_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _fooFieldNames;
-          if (hasA) {
-            output.WriteInt32(1, field_names[0], A);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasA) {
-            size += pb::CodedOutputStream.ComputeInt32Size(1, A);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static Foo ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Foo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Foo ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Foo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Foo ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Foo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static Foo ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static Foo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static Foo ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Foo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private Foo MakeReadOnly() {
-          return this;
-        }
-
-        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(Foo prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<Foo, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(Foo cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private Foo result;
-
-          private Foo PrepareBuilder() {
-            if (resultIsReadOnly) {
-              Foo original = result;
-              result = new Foo();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override Foo MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Descriptor; }
-          }
-
-          public override Foo DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance; }
-          }
-
-          public override Foo BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is Foo) {
-              return MergeFrom((Foo) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(Foo other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasA) {
-              A = other.A;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_fooFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _fooFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 8: {
-                  result.hasA = input.ReadInt32(ref result.a_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasA {
-            get { return result.hasA; }
-          }
-          public int A {
-            get { return result.A; }
-            set { SetA(value); }
-          }
-          public Builder SetA(int value) {
-            PrepareBuilder();
-            result.hasA = true;
-            result.a_ = value;
-            return this;
-          }
-          public Builder ClearA() {
-            PrepareBuilder();
-            result.hasA = false;
-            result.a_ = 0;
-            return this;
-          }
-        }
-        static Foo() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Bar : pb::GeneratedMessage<Bar, Bar.Builder> {
-        private Bar() { }
-        private static readonly Bar defaultInstance = new Bar().MakeReadOnly();
-        private static readonly string[] _barFieldNames = new string[] { "a" };
-        private static readonly uint[] _barFieldTags = new uint[] { 8 };
-        public static Bar DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override Bar DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override Bar ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<Bar, Bar.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable; }
-        }
-
-        public const int AFieldNumber = 1;
-        private bool hasA;
-        private int a_;
-        public bool HasA {
-          get { return hasA; }
-        }
-        public int A {
-          get { return a_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _barFieldNames;
-          if (hasA) {
-            output.WriteInt32(1, field_names[0], A);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasA) {
-            size += pb::CodedOutputStream.ComputeInt32Size(1, A);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static Bar ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Bar ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Bar ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Bar ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Bar ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Bar ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static Bar ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static Bar ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static Bar ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Bar ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private Bar MakeReadOnly() {
-          return this;
-        }
-
-        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(Bar prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<Bar, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(Bar cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private Bar result;
-
-          private Bar PrepareBuilder() {
-            if (resultIsReadOnly) {
-              Bar original = result;
-              result = new Bar();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override Bar MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Descriptor; }
-          }
-
-          public override Bar DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance; }
-          }
-
-          public override Bar BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is Bar) {
-              return MergeFrom((Bar) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(Bar other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasA) {
-              A = other.A;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_barFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _barFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 8: {
-                  result.hasA = input.ReadInt32(ref result.a_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasA {
-            get { return result.hasA; }
-          }
-          public int A {
-            get { return result.A; }
-            set { SetA(value); }
-          }
-          public Builder SetA(int value) {
-            PrepareBuilder();
-            result.hasA = true;
-            result.a_ = value;
-            return this;
-          }
-          public Builder ClearA() {
-            PrepareBuilder();
-            result.hasA = false;
-            result.a_ = 0;
-            return this;
-          }
-        }
-        static Bar() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int AFieldNumber = 1;
-    private bool hasA;
-    private int a_;
-    public bool HasA {
-      get { return hasA; }
-    }
-    public int A {
-      get { return a_; }
-    }
-
-    public const int FooFieldNumber = 2;
-    private bool hasFoo;
-    private global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo foo_;
-    public bool HasFoo {
-      get { return hasFoo; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo Foo {
-      get { return foo_ ?? global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance; }
-    }
-
-    public const int BarFieldNumber = 3;
-    private bool hasBar;
-    private global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar bar_;
-    public bool HasBar {
-      get { return hasBar; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar Bar {
-      get { return bar_ ?? global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testDupFieldNumberFieldNames;
-      if (hasA) {
-        output.WriteInt32(1, field_names[0], A);
-      }
-      if (hasFoo) {
-        output.WriteGroup(2, field_names[2], Foo);
-      }
-      if (hasBar) {
-        output.WriteGroup(3, field_names[1], Bar);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasA) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, A);
-      }
-      if (hasFoo) {
-        size += pb::CodedOutputStream.ComputeGroupSize(2, Foo);
-      }
-      if (hasBar) {
-        size += pb::CodedOutputStream.ComputeGroupSize(3, Bar);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestDupFieldNumber ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestDupFieldNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestDupFieldNumber MakeReadOnly() {
-      return this;
-    }
-
-    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(TestDupFieldNumber prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestDupFieldNumber, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestDupFieldNumber cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestDupFieldNumber result;
-
-      private TestDupFieldNumber PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestDupFieldNumber original = result;
-          result = new TestDupFieldNumber();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestDupFieldNumber MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Descriptor; }
-      }
-
-      public override TestDupFieldNumber DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.DefaultInstance; }
-      }
-
-      public override TestDupFieldNumber BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestDupFieldNumber) {
-          return MergeFrom((TestDupFieldNumber) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestDupFieldNumber other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasA) {
-          A = other.A;
-        }
-        if (other.HasFoo) {
-          MergeFoo(other.Foo);
-        }
-        if (other.HasBar) {
-          MergeBar(other.Bar);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testDupFieldNumberFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testDupFieldNumberFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasA = input.ReadInt32(ref result.a_);
-              break;
-            }
-            case 19: {
-              global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder();
-              if (result.hasFoo) {
-                subBuilder.MergeFrom(Foo);
-              }
-              input.ReadGroup(2, subBuilder, extensionRegistry);
-              Foo = subBuilder.BuildPartial();
-              break;
-            }
-            case 27: {
-              global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder();
-              if (result.hasBar) {
-                subBuilder.MergeFrom(Bar);
-              }
-              input.ReadGroup(3, subBuilder, extensionRegistry);
-              Bar = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasA {
-        get { return result.hasA; }
-      }
-      public int A {
-        get { return result.A; }
-        set { SetA(value); }
-      }
-      public Builder SetA(int value) {
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = value;
-        return this;
-      }
-      public Builder ClearA() {
-        PrepareBuilder();
-        result.hasA = false;
-        result.a_ = 0;
-        return this;
-      }
-
-      public bool HasFoo {
-       get { return result.hasFoo; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo Foo {
-        get { return result.Foo; }
-        set { SetFoo(value); }
-      }
-      public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasFoo = true;
-        result.foo_ = value;
-        return this;
-      }
-      public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasFoo = true;
-        result.foo_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasFoo &&
-            result.foo_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) {
-            result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder(result.foo_).MergeFrom(value).BuildPartial();
-        } else {
-          result.foo_ = value;
-        }
-        result.hasFoo = true;
-        return this;
-      }
-      public Builder ClearFoo() {
-        PrepareBuilder();
-        result.hasFoo = false;
-        result.foo_ = null;
-        return this;
-      }
-
-      public bool HasBar {
-       get { return result.hasBar; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar Bar {
-        get { return result.Bar; }
-        set { SetBar(value); }
-      }
-      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasBar = true;
-        result.bar_ = value;
-        return this;
-      }
-      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasBar = true;
-        result.bar_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasBar &&
-            result.bar_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) {
-            result.bar_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder(result.bar_).MergeFrom(value).BuildPartial();
-        } else {
-          result.bar_ = value;
-        }
-        result.hasBar = true;
-        return this;
-      }
-      public Builder ClearBar() {
-        PrepareBuilder();
-        result.hasBar = false;
-        result.bar_ = null;
-        return this;
-      }
-    }
-    static TestDupFieldNumber() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestEagerMessage : pb::GeneratedMessage<TestEagerMessage, TestEagerMessage.Builder> {
-    private TestEagerMessage() { }
-    private static readonly TestEagerMessage defaultInstance = new TestEagerMessage().MakeReadOnly();
-    private static readonly string[] _testEagerMessageFieldNames = new string[] { "sub_message" };
-    private static readonly uint[] _testEagerMessageFieldTags = new uint[] { 10 };
-    public static TestEagerMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestEagerMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestEagerMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestEagerMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestEagerMessage, TestEagerMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestEagerMessage__FieldAccessorTable; }
-    }
-
-    public const int SubMessageFieldNumber = 1;
-    private bool hasSubMessage;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes subMessage_;
-    public bool HasSubMessage {
-      get { return hasSubMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes SubMessage {
-      get { return subMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testEagerMessageFieldNames;
-      if (hasSubMessage) {
-        output.WriteMessage(1, field_names[0], SubMessage);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasSubMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, SubMessage);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestEagerMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestEagerMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestEagerMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestEagerMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestEagerMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestEagerMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestEagerMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestEagerMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestEagerMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestEagerMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestEagerMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(TestEagerMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestEagerMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestEagerMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestEagerMessage result;
-
-      private TestEagerMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestEagerMessage original = result;
-          result = new TestEagerMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestEagerMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestEagerMessage.Descriptor; }
-      }
-
-      public override TestEagerMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestEagerMessage.DefaultInstance; }
-      }
-
-      public override TestEagerMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestEagerMessage) {
-          return MergeFrom((TestEagerMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestEagerMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestEagerMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasSubMessage) {
-          MergeSubMessage(other.SubMessage);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testEagerMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testEagerMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-              if (result.hasSubMessage) {
-                subBuilder.MergeFrom(SubMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              SubMessage = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasSubMessage {
-       get { return result.hasSubMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes SubMessage {
-        get { return result.SubMessage; }
-        set { SetSubMessage(value); }
-      }
-      public Builder SetSubMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasSubMessage = true;
-        result.subMessage_ = value;
-        return this;
-      }
-      public Builder SetSubMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasSubMessage = true;
-        result.subMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeSubMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasSubMessage &&
-            result.subMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-            result.subMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.subMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.subMessage_ = value;
-        }
-        result.hasSubMessage = true;
-        return this;
-      }
-      public Builder ClearSubMessage() {
-        PrepareBuilder();
-        result.hasSubMessage = false;
-        result.subMessage_ = null;
-        return this;
-      }
-    }
-    static TestEagerMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestLazyMessage : pb::GeneratedMessage<TestLazyMessage, TestLazyMessage.Builder> {
-    private TestLazyMessage() { }
-    private static readonly TestLazyMessage defaultInstance = new TestLazyMessage().MakeReadOnly();
-    private static readonly string[] _testLazyMessageFieldNames = new string[] { "sub_message" };
-    private static readonly uint[] _testLazyMessageFieldTags = new uint[] { 10 };
-    public static TestLazyMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestLazyMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestLazyMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestLazyMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestLazyMessage, TestLazyMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestLazyMessage__FieldAccessorTable; }
-    }
-
-    public const int SubMessageFieldNumber = 1;
-    private bool hasSubMessage;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes subMessage_;
-    public bool HasSubMessage {
-      get { return hasSubMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes SubMessage {
-      get { return subMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testLazyMessageFieldNames;
-      if (hasSubMessage) {
-        output.WriteMessage(1, field_names[0], SubMessage);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasSubMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, SubMessage);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestLazyMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestLazyMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestLazyMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestLazyMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestLazyMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestLazyMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestLazyMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestLazyMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestLazyMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestLazyMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestLazyMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(TestLazyMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestLazyMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestLazyMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestLazyMessage result;
-
-      private TestLazyMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestLazyMessage original = result;
-          result = new TestLazyMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestLazyMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestLazyMessage.Descriptor; }
-      }
-
-      public override TestLazyMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestLazyMessage.DefaultInstance; }
-      }
-
-      public override TestLazyMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestLazyMessage) {
-          return MergeFrom((TestLazyMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestLazyMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestLazyMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasSubMessage) {
-          MergeSubMessage(other.SubMessage);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testLazyMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testLazyMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-              if (result.hasSubMessage) {
-                subBuilder.MergeFrom(SubMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              SubMessage = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasSubMessage {
-       get { return result.hasSubMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes SubMessage {
-        get { return result.SubMessage; }
-        set { SetSubMessage(value); }
-      }
-      public Builder SetSubMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasSubMessage = true;
-        result.subMessage_ = value;
-        return this;
-      }
-      public Builder SetSubMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasSubMessage = true;
-        result.subMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeSubMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasSubMessage &&
-            result.subMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-            result.subMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.subMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.subMessage_ = value;
-        }
-        result.hasSubMessage = true;
-        return this;
-      }
-      public Builder ClearSubMessage() {
-        PrepareBuilder();
-        result.hasSubMessage = false;
-        result.subMessage_ = null;
-        return this;
-      }
-    }
-    static TestLazyMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestNestedMessageHasBits : pb::GeneratedMessage<TestNestedMessageHasBits, TestNestedMessageHasBits.Builder> {
-    private TestNestedMessageHasBits() { }
-    private static readonly TestNestedMessageHasBits defaultInstance = new TestNestedMessageHasBits().MakeReadOnly();
-    private static readonly string[] _testNestedMessageHasBitsFieldNames = new string[] { "optional_nested_message" };
-    private static readonly uint[] _testNestedMessageHasBitsFieldTags = new uint[] { 10 };
-    public static TestNestedMessageHasBits DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestNestedMessageHasBits DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestNestedMessageHasBits ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestNestedMessageHasBits, TestNestedMessageHasBits.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {
-        private NestedMessage() { }
-        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();
-        private static readonly string[] _nestedMessageFieldNames = new string[] { "nestedmessage_repeated_foreignmessage", "nestedmessage_repeated_int32" };
-        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 18, 8 };
-        public static NestedMessage DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override NestedMessage DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override NestedMessage ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable; }
-        }
-
-        public const int NestedmessageRepeatedInt32FieldNumber = 1;
-        private pbc::PopsicleList<int> nestedmessageRepeatedInt32_ = new pbc::PopsicleList<int>();
-        public scg::IList<int> NestedmessageRepeatedInt32List {
-          get { return pbc::Lists.AsReadOnly(nestedmessageRepeatedInt32_); }
-        }
-        public int NestedmessageRepeatedInt32Count {
-          get { return nestedmessageRepeatedInt32_.Count; }
-        }
-        public int GetNestedmessageRepeatedInt32(int index) {
-          return nestedmessageRepeatedInt32_[index];
-        }
-
-        public const int NestedmessageRepeatedForeignmessageFieldNumber = 2;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> nestedmessageRepeatedForeignmessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> NestedmessageRepeatedForeignmessageList {
-          get { return nestedmessageRepeatedForeignmessage_; }
-        }
-        public int NestedmessageRepeatedForeignmessageCount {
-          get { return nestedmessageRepeatedForeignmessage_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetNestedmessageRepeatedForeignmessage(int index) {
-          return nestedmessageRepeatedForeignmessage_[index];
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _nestedMessageFieldNames;
-          if (nestedmessageRepeatedInt32_.Count > 0) {
-            output.WriteInt32Array(1, field_names[1], nestedmessageRepeatedInt32_);
-          }
-          if (nestedmessageRepeatedForeignmessage_.Count > 0) {
-            output.WriteMessageArray(2, field_names[0], nestedmessageRepeatedForeignmessage_);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          {
-            int dataSize = 0;
-            foreach (int element in NestedmessageRepeatedInt32List) {
-              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-            }
-            size += dataSize;
-            size += 1 * nestedmessageRepeatedInt32_.Count;
-          }
-          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in NestedmessageRepeatedForeignmessageList) {
-            size += pb::CodedOutputStream.ComputeMessageSize(2, element);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private NestedMessage MakeReadOnly() {
-          nestedmessageRepeatedInt32_.MakeReadOnly();
-          nestedmessageRepeatedForeignmessage_.MakeReadOnly();
-          return this;
-        }
-
-        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(NestedMessage prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(NestedMessage cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private NestedMessage result;
-
-          private NestedMessage PrepareBuilder() {
-            if (resultIsReadOnly) {
-              NestedMessage original = result;
-              result = new NestedMessage();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override NestedMessage MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Descriptor; }
-          }
-
-          public override NestedMessage DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance; }
-          }
-
-          public override NestedMessage BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is NestedMessage) {
-              return MergeFrom((NestedMessage) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(NestedMessage other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.nestedmessageRepeatedInt32_.Count != 0) {
-              result.nestedmessageRepeatedInt32_.Add(other.nestedmessageRepeatedInt32_);
-            }
-            if (other.nestedmessageRepeatedForeignmessage_.Count != 0) {
-              result.nestedmessageRepeatedForeignmessage_.Add(other.nestedmessageRepeatedForeignmessage_);
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _nestedMessageFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 10:
-                case 8: {
-                  input.ReadInt32Array(tag, field_name, result.nestedmessageRepeatedInt32_);
-                  break;
-                }
-                case 18: {
-                  input.ReadMessageArray(tag, field_name, result.nestedmessageRepeatedForeignmessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public pbc::IPopsicleList<int> NestedmessageRepeatedInt32List {
-            get { return PrepareBuilder().nestedmessageRepeatedInt32_; }
-          }
-          public int NestedmessageRepeatedInt32Count {
-            get { return result.NestedmessageRepeatedInt32Count; }
-          }
-          public int GetNestedmessageRepeatedInt32(int index) {
-            return result.GetNestedmessageRepeatedInt32(index);
-          }
-          public Builder SetNestedmessageRepeatedInt32(int index, int value) {
-            PrepareBuilder();
-            result.nestedmessageRepeatedInt32_[index] = value;
-            return this;
-          }
-          public Builder AddNestedmessageRepeatedInt32(int value) {
-            PrepareBuilder();
-            result.nestedmessageRepeatedInt32_.Add(value);
-            return this;
-          }
-          public Builder AddRangeNestedmessageRepeatedInt32(scg::IEnumerable<int> values) {
-            PrepareBuilder();
-            result.nestedmessageRepeatedInt32_.Add(values);
-            return this;
-          }
-          public Builder ClearNestedmessageRepeatedInt32() {
-            PrepareBuilder();
-            result.nestedmessageRepeatedInt32_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> NestedmessageRepeatedForeignmessageList {
-            get { return PrepareBuilder().nestedmessageRepeatedForeignmessage_; }
-          }
-          public int NestedmessageRepeatedForeignmessageCount {
-            get { return result.NestedmessageRepeatedForeignmessageCount; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetNestedmessageRepeatedForeignmessage(int index) {
-            return result.GetNestedmessageRepeatedForeignmessage(index);
-          }
-          public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.nestedmessageRepeatedForeignmessage_[index] = value;
-            return this;
-          }
-          public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.nestedmessageRepeatedForeignmessage_[index] = builderForValue.Build();
-            return this;
-          }
-          public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.nestedmessageRepeatedForeignmessage_.Add(value);
-            return this;
-          }
-          public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.nestedmessageRepeatedForeignmessage_.Add(builderForValue.Build());
-            return this;
-          }
-          public Builder AddRangeNestedmessageRepeatedForeignmessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {
-            PrepareBuilder();
-            result.nestedmessageRepeatedForeignmessage_.Add(values);
-            return this;
-          }
-          public Builder ClearNestedmessageRepeatedForeignmessage() {
-            PrepareBuilder();
-            result.nestedmessageRepeatedForeignmessage_.Clear();
-            return this;
-          }
-        }
-        static NestedMessage() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int OptionalNestedMessageFieldNumber = 1;
-    private bool hasOptionalNestedMessage;
-    private global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage optionalNestedMessage_;
-    public bool HasOptionalNestedMessage {
-      get { return hasOptionalNestedMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage OptionalNestedMessage {
-      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testNestedMessageHasBitsFieldNames;
-      if (hasOptionalNestedMessage) {
-        output.WriteMessage(1, field_names[0], OptionalNestedMessage);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasOptionalNestedMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalNestedMessage);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestNestedMessageHasBits ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestNestedMessageHasBits ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestNestedMessageHasBits MakeReadOnly() {
-      return this;
-    }
-
-    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(TestNestedMessageHasBits prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedMessageHasBits, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestNestedMessageHasBits cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestNestedMessageHasBits result;
-
-      private TestNestedMessageHasBits PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestNestedMessageHasBits original = result;
-          result = new TestNestedMessageHasBits();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestNestedMessageHasBits MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Descriptor; }
-      }
-
-      public override TestNestedMessageHasBits DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.DefaultInstance; }
-      }
-
-      public override TestNestedMessageHasBits BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestNestedMessageHasBits) {
-          return MergeFrom((TestNestedMessageHasBits) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestNestedMessageHasBits other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasOptionalNestedMessage) {
-          MergeOptionalNestedMessage(other.OptionalNestedMessage);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testNestedMessageHasBitsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testNestedMessageHasBitsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder();
-              if (result.hasOptionalNestedMessage) {
-                subBuilder.MergeFrom(OptionalNestedMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalNestedMessage = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasOptionalNestedMessage {
-       get { return result.hasOptionalNestedMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage OptionalNestedMessage {
-        get { return result.OptionalNestedMessage; }
-        set { SetOptionalNestedMessage(value); }
-      }
-      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = true;
-        result.optionalNestedMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = true;
-        result.optionalNestedMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalNestedMessage &&
-            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) {
-            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalNestedMessage_ = value;
-        }
-        result.hasOptionalNestedMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalNestedMessage() {
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = false;
-        result.optionalNestedMessage_ = null;
-        return this;
-      }
-    }
-    static TestNestedMessageHasBits() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestCamelCaseFieldNames : pb::GeneratedMessage<TestCamelCaseFieldNames, TestCamelCaseFieldNames.Builder> {
-    private TestCamelCaseFieldNames() { }
-    private static readonly TestCamelCaseFieldNames defaultInstance = new TestCamelCaseFieldNames().MakeReadOnly();
-    private static readonly string[] _testCamelCaseFieldNamesFieldNames = new string[] { "CordField", "EnumField", "MessageField", "PrimitiveField", "RepeatedCordField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedStringPieceField", "StringField", "StringPieceField" };
-    private static readonly uint[] _testCamelCaseFieldNamesFieldTags = new uint[] { 50, 24, 34, 8, 98, 72, 82, 56, 66, 90, 18, 42 };
-    public static TestCamelCaseFieldNames DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestCamelCaseFieldNames DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestCamelCaseFieldNames ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestCamelCaseFieldNames, TestCamelCaseFieldNames.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable; }
-    }
-
-    public const int PrimitiveFieldFieldNumber = 1;
-    private bool hasPrimitiveField;
-    private int primitiveField_;
-    public bool HasPrimitiveField {
-      get { return hasPrimitiveField; }
-    }
-    public int PrimitiveField {
-      get { return primitiveField_; }
-    }
-
-    public const int StringFieldFieldNumber = 2;
-    private bool hasStringField;
-    private string stringField_ = "";
-    public bool HasStringField {
-      get { return hasStringField; }
-    }
-    public string StringField {
-      get { return stringField_; }
-    }
-
-    public const int EnumFieldFieldNumber = 3;
-    private bool hasEnumField;
-    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum enumField_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;
-    public bool HasEnumField {
-      get { return hasEnumField; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumField {
-      get { return enumField_; }
-    }
-
-    public const int MessageFieldFieldNumber = 4;
-    private bool hasMessageField;
-    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage messageField_;
-    public bool HasMessageField {
-      get { return hasMessageField; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageField {
-      get { return messageField_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }
-    }
-
-    public const int StringPieceFieldFieldNumber = 5;
-    private bool hasStringPieceField;
-    private string stringPieceField_ = "";
-    public bool HasStringPieceField {
-      get { return hasStringPieceField; }
-    }
-    public string StringPieceField {
-      get { return stringPieceField_; }
-    }
-
-    public const int CordFieldFieldNumber = 6;
-    private bool hasCordField;
-    private string cordField_ = "";
-    public bool HasCordField {
-      get { return hasCordField; }
-    }
-    public string CordField {
-      get { return cordField_; }
-    }
-
-    public const int RepeatedPrimitiveFieldFieldNumber = 7;
-    private pbc::PopsicleList<int> repeatedPrimitiveField_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> RepeatedPrimitiveFieldList {
-      get { return pbc::Lists.AsReadOnly(repeatedPrimitiveField_); }
-    }
-    public int RepeatedPrimitiveFieldCount {
-      get { return repeatedPrimitiveField_.Count; }
-    }
-    public int GetRepeatedPrimitiveField(int index) {
-      return repeatedPrimitiveField_[index];
-    }
-
-    public const int RepeatedStringFieldFieldNumber = 8;
-    private pbc::PopsicleList<string> repeatedStringField_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedStringFieldList {
-      get { return pbc::Lists.AsReadOnly(repeatedStringField_); }
-    }
-    public int RepeatedStringFieldCount {
-      get { return repeatedStringField_.Count; }
-    }
-    public string GetRepeatedStringField(int index) {
-      return repeatedStringField_[index];
-    }
-
-    public const int RepeatedEnumFieldFieldNumber = 9;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> repeatedEnumField_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedEnumFieldList {
-      get { return pbc::Lists.AsReadOnly(repeatedEnumField_); }
-    }
-    public int RepeatedEnumFieldCount {
-      get { return repeatedEnumField_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedEnumField(int index) {
-      return repeatedEnumField_[index];
-    }
-
-    public const int RepeatedMessageFieldFieldNumber = 10;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> repeatedMessageField_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedMessageFieldList {
-      get { return repeatedMessageField_; }
-    }
-    public int RepeatedMessageFieldCount {
-      get { return repeatedMessageField_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedMessageField(int index) {
-      return repeatedMessageField_[index];
-    }
-
-    public const int RepeatedStringPieceFieldFieldNumber = 11;
-    private pbc::PopsicleList<string> repeatedStringPieceField_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedStringPieceFieldList {
-      get { return pbc::Lists.AsReadOnly(repeatedStringPieceField_); }
-    }
-    public int RepeatedStringPieceFieldCount {
-      get { return repeatedStringPieceField_.Count; }
-    }
-    public string GetRepeatedStringPieceField(int index) {
-      return repeatedStringPieceField_[index];
-    }
-
-    public const int RepeatedCordFieldFieldNumber = 12;
-    private pbc::PopsicleList<string> repeatedCordField_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedCordFieldList {
-      get { return pbc::Lists.AsReadOnly(repeatedCordField_); }
-    }
-    public int RepeatedCordFieldCount {
-      get { return repeatedCordField_.Count; }
-    }
-    public string GetRepeatedCordField(int index) {
-      return repeatedCordField_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testCamelCaseFieldNamesFieldNames;
-      if (hasPrimitiveField) {
-        output.WriteInt32(1, field_names[3], PrimitiveField);
-      }
-      if (hasStringField) {
-        output.WriteString(2, field_names[10], StringField);
-      }
-      if (hasEnumField) {
-        output.WriteEnum(3, field_names[1], (int) EnumField, EnumField);
-      }
-      if (hasMessageField) {
-        output.WriteMessage(4, field_names[2], MessageField);
-      }
-      if (hasStringPieceField) {
-        output.WriteString(5, field_names[11], StringPieceField);
-      }
-      if (hasCordField) {
-        output.WriteString(6, field_names[0], CordField);
-      }
-      if (repeatedPrimitiveField_.Count > 0) {
-        output.WriteInt32Array(7, field_names[7], repeatedPrimitiveField_);
-      }
-      if (repeatedStringField_.Count > 0) {
-        output.WriteStringArray(8, field_names[8], repeatedStringField_);
-      }
-      if (repeatedEnumField_.Count > 0) {
-        output.WriteEnumArray(9, field_names[5], repeatedEnumField_);
-      }
-      if (repeatedMessageField_.Count > 0) {
-        output.WriteMessageArray(10, field_names[6], repeatedMessageField_);
-      }
-      if (repeatedStringPieceField_.Count > 0) {
-        output.WriteStringArray(11, field_names[9], repeatedStringPieceField_);
-      }
-      if (repeatedCordField_.Count > 0) {
-        output.WriteStringArray(12, field_names[4], repeatedCordField_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasPrimitiveField) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveField);
-      }
-      if (hasStringField) {
-        size += pb::CodedOutputStream.ComputeStringSize(2, StringField);
-      }
-      if (hasEnumField) {
-        size += pb::CodedOutputStream.ComputeEnumSize(3, (int) EnumField);
-      }
-      if (hasMessageField) {
-        size += pb::CodedOutputStream.ComputeMessageSize(4, MessageField);
-      }
-      if (hasStringPieceField) {
-        size += pb::CodedOutputStream.ComputeStringSize(5, StringPieceField);
-      }
-      if (hasCordField) {
-        size += pb::CodedOutputStream.ComputeStringSize(6, CordField);
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in RepeatedPrimitiveFieldList) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * repeatedPrimitiveField_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedStringFieldList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * repeatedStringField_.Count;
-      }
-      {
-        int dataSize = 0;
-        if (repeatedEnumField_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in repeatedEnumField_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 1 * repeatedEnumField_.Count;
-        }
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in RepeatedMessageFieldList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(10, element);
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedStringPieceFieldList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * repeatedStringPieceField_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedCordFieldList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * repeatedCordField_.Count;
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestCamelCaseFieldNames ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestCamelCaseFieldNames ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestCamelCaseFieldNames MakeReadOnly() {
-      repeatedPrimitiveField_.MakeReadOnly();
-      repeatedStringField_.MakeReadOnly();
-      repeatedEnumField_.MakeReadOnly();
-      repeatedMessageField_.MakeReadOnly();
-      repeatedStringPieceField_.MakeReadOnly();
-      repeatedCordField_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestCamelCaseFieldNames prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestCamelCaseFieldNames, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestCamelCaseFieldNames cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestCamelCaseFieldNames result;
-
-      private TestCamelCaseFieldNames PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestCamelCaseFieldNames original = result;
-          result = new TestCamelCaseFieldNames();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestCamelCaseFieldNames MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Descriptor; }
-      }
-
-      public override TestCamelCaseFieldNames DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.DefaultInstance; }
-      }
-
-      public override TestCamelCaseFieldNames BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestCamelCaseFieldNames) {
-          return MergeFrom((TestCamelCaseFieldNames) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestCamelCaseFieldNames other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasPrimitiveField) {
-          PrimitiveField = other.PrimitiveField;
-        }
-        if (other.HasStringField) {
-          StringField = other.StringField;
-        }
-        if (other.HasEnumField) {
-          EnumField = other.EnumField;
-        }
-        if (other.HasMessageField) {
-          MergeMessageField(other.MessageField);
-        }
-        if (other.HasStringPieceField) {
-          StringPieceField = other.StringPieceField;
-        }
-        if (other.HasCordField) {
-          CordField = other.CordField;
-        }
-        if (other.repeatedPrimitiveField_.Count != 0) {
-          result.repeatedPrimitiveField_.Add(other.repeatedPrimitiveField_);
-        }
-        if (other.repeatedStringField_.Count != 0) {
-          result.repeatedStringField_.Add(other.repeatedStringField_);
-        }
-        if (other.repeatedEnumField_.Count != 0) {
-          result.repeatedEnumField_.Add(other.repeatedEnumField_);
-        }
-        if (other.repeatedMessageField_.Count != 0) {
-          result.repeatedMessageField_.Add(other.repeatedMessageField_);
-        }
-        if (other.repeatedStringPieceField_.Count != 0) {
-          result.repeatedStringPieceField_.Add(other.repeatedStringPieceField_);
-        }
-        if (other.repeatedCordField_.Count != 0) {
-          result.repeatedCordField_.Add(other.repeatedCordField_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testCamelCaseFieldNamesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testCamelCaseFieldNamesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasPrimitiveField = input.ReadInt32(ref result.primitiveField_);
-              break;
-            }
-            case 18: {
-              result.hasStringField = input.ReadString(ref result.stringField_);
-              break;
-            }
-            case 24: {
-              object unknown;
-              if(input.ReadEnum(ref result.enumField_, out unknown)) {
-                result.hasEnumField = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(3, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 34: {
-              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();
-              if (result.hasMessageField) {
-                subBuilder.MergeFrom(MessageField);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              MessageField = subBuilder.BuildPartial();
-              break;
-            }
-            case 42: {
-              result.hasStringPieceField = input.ReadString(ref result.stringPieceField_);
-              break;
-            }
-            case 50: {
-              result.hasCordField = input.ReadString(ref result.cordField_);
-              break;
-            }
-            case 58:
-            case 56: {
-              input.ReadInt32Array(tag, field_name, result.repeatedPrimitiveField_);
-              break;
-            }
-            case 66: {
-              input.ReadStringArray(tag, field_name, result.repeatedStringField_);
-              break;
-            }
-            case 74:
-            case 72: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.repeatedEnumField_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(9, (ulong)(int)rawValue);
-              }
-              break;
-            }
-            case 82: {
-              input.ReadMessageArray(tag, field_name, result.repeatedMessageField_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 90: {
-              input.ReadStringArray(tag, field_name, result.repeatedStringPieceField_);
-              break;
-            }
-            case 98: {
-              input.ReadStringArray(tag, field_name, result.repeatedCordField_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasPrimitiveField {
-        get { return result.hasPrimitiveField; }
-      }
-      public int PrimitiveField {
-        get { return result.PrimitiveField; }
-        set { SetPrimitiveField(value); }
-      }
-      public Builder SetPrimitiveField(int value) {
-        PrepareBuilder();
-        result.hasPrimitiveField = true;
-        result.primitiveField_ = value;
-        return this;
-      }
-      public Builder ClearPrimitiveField() {
-        PrepareBuilder();
-        result.hasPrimitiveField = false;
-        result.primitiveField_ = 0;
-        return this;
-      }
-
-      public bool HasStringField {
-        get { return result.hasStringField; }
-      }
-      public string StringField {
-        get { return result.StringField; }
-        set { SetStringField(value); }
-      }
-      public Builder SetStringField(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasStringField = true;
-        result.stringField_ = value;
-        return this;
-      }
-      public Builder ClearStringField() {
-        PrepareBuilder();
-        result.hasStringField = false;
-        result.stringField_ = "";
-        return this;
-      }
-
-      public bool HasEnumField {
-        get { return result.hasEnumField; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumField {
-        get { return result.EnumField; }
-        set { SetEnumField(value); }
-      }
-      public Builder SetEnumField(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.hasEnumField = true;
-        result.enumField_ = value;
-        return this;
-      }
-      public Builder ClearEnumField() {
-        PrepareBuilder();
-        result.hasEnumField = false;
-        result.enumField_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;
-        return this;
-      }
-
-      public bool HasMessageField {
-       get { return result.hasMessageField; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageField {
-        get { return result.MessageField; }
-        set { SetMessageField(value); }
-      }
-      public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasMessageField = true;
-        result.messageField_ = value;
-        return this;
-      }
-      public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasMessageField = true;
-        result.messageField_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasMessageField &&
-            result.messageField_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {
-            result.messageField_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageField_).MergeFrom(value).BuildPartial();
-        } else {
-          result.messageField_ = value;
-        }
-        result.hasMessageField = true;
-        return this;
-      }
-      public Builder ClearMessageField() {
-        PrepareBuilder();
-        result.hasMessageField = false;
-        result.messageField_ = null;
-        return this;
-      }
-
-      public bool HasStringPieceField {
-        get { return result.hasStringPieceField; }
-      }
-      public string StringPieceField {
-        get { return result.StringPieceField; }
-        set { SetStringPieceField(value); }
-      }
-      public Builder SetStringPieceField(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasStringPieceField = true;
-        result.stringPieceField_ = value;
-        return this;
-      }
-      public Builder ClearStringPieceField() {
-        PrepareBuilder();
-        result.hasStringPieceField = false;
-        result.stringPieceField_ = "";
-        return this;
-      }
-
-      public bool HasCordField {
-        get { return result.hasCordField; }
-      }
-      public string CordField {
-        get { return result.CordField; }
-        set { SetCordField(value); }
-      }
-      public Builder SetCordField(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasCordField = true;
-        result.cordField_ = value;
-        return this;
-      }
-      public Builder ClearCordField() {
-        PrepareBuilder();
-        result.hasCordField = false;
-        result.cordField_ = "";
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> RepeatedPrimitiveFieldList {
-        get { return PrepareBuilder().repeatedPrimitiveField_; }
-      }
-      public int RepeatedPrimitiveFieldCount {
-        get { return result.RepeatedPrimitiveFieldCount; }
-      }
-      public int GetRepeatedPrimitiveField(int index) {
-        return result.GetRepeatedPrimitiveField(index);
-      }
-      public Builder SetRepeatedPrimitiveField(int index, int value) {
-        PrepareBuilder();
-        result.repeatedPrimitiveField_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedPrimitiveField(int value) {
-        PrepareBuilder();
-        result.repeatedPrimitiveField_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedPrimitiveField(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.repeatedPrimitiveField_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedPrimitiveField() {
-        PrepareBuilder();
-        result.repeatedPrimitiveField_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedStringFieldList {
-        get { return PrepareBuilder().repeatedStringField_; }
-      }
-      public int RepeatedStringFieldCount {
-        get { return result.RepeatedStringFieldCount; }
-      }
-      public string GetRepeatedStringField(int index) {
-        return result.GetRepeatedStringField(index);
-      }
-      public Builder SetRepeatedStringField(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedStringField_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedStringField(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedStringField_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedStringField(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedStringField_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedStringField() {
-        PrepareBuilder();
-        result.repeatedStringField_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedEnumFieldList {
-        get { return PrepareBuilder().repeatedEnumField_; }
-      }
-      public int RepeatedEnumFieldCount {
-        get { return result.RepeatedEnumFieldCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedEnumField(int index) {
-        return result.GetRepeatedEnumField(index);
-      }
-      public Builder SetRepeatedEnumField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.repeatedEnumField_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedEnumField(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.repeatedEnumField_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedEnumField(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {
-        PrepareBuilder();
-        result.repeatedEnumField_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedEnumField() {
-        PrepareBuilder();
-        result.repeatedEnumField_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedMessageFieldList {
-        get { return PrepareBuilder().repeatedMessageField_; }
-      }
-      public int RepeatedMessageFieldCount {
-        get { return result.RepeatedMessageFieldCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedMessageField(int index) {
-        return result.GetRepeatedMessageField(index);
-      }
-      public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedMessageField_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedMessageField_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedMessageField_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedMessageField_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedMessageField(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {
-        PrepareBuilder();
-        result.repeatedMessageField_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedMessageField() {
-        PrepareBuilder();
-        result.repeatedMessageField_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedStringPieceFieldList {
-        get { return PrepareBuilder().repeatedStringPieceField_; }
-      }
-      public int RepeatedStringPieceFieldCount {
-        get { return result.RepeatedStringPieceFieldCount; }
-      }
-      public string GetRepeatedStringPieceField(int index) {
-        return result.GetRepeatedStringPieceField(index);
-      }
-      public Builder SetRepeatedStringPieceField(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedStringPieceField_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedStringPieceField(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedStringPieceField_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedStringPieceField(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedStringPieceField_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedStringPieceField() {
-        PrepareBuilder();
-        result.repeatedStringPieceField_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedCordFieldList {
-        get { return PrepareBuilder().repeatedCordField_; }
-      }
-      public int RepeatedCordFieldCount {
-        get { return result.RepeatedCordFieldCount; }
-      }
-      public string GetRepeatedCordField(int index) {
-        return result.GetRepeatedCordField(index);
-      }
-      public Builder SetRepeatedCordField(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedCordField_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedCordField(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedCordField_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedCordField(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedCordField_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedCordField() {
-        PrepareBuilder();
-        result.repeatedCordField_.Clear();
-        return this;
-      }
-    }
-    static TestCamelCaseFieldNames() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestFieldOrderings : pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder> {
-    private TestFieldOrderings() { }
-    private static readonly TestFieldOrderings defaultInstance = new TestFieldOrderings().MakeReadOnly();
-    private static readonly string[] _testFieldOrderingsFieldNames = new string[] { "my_float", "my_int", "my_string", "optional_nested_message" };
-    private static readonly uint[] _testFieldOrderingsFieldTags = new uint[] { 813, 8, 90, 1602 };
-    public static TestFieldOrderings DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestFieldOrderings DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestFieldOrderings ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestFieldOrderings__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestFieldOrderings, TestFieldOrderings.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {
-        private NestedMessage() { }
-        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();
-        private static readonly string[] _nestedMessageFieldNames = new string[] { "bb", "oo" };
-        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8, 16 };
-        public static NestedMessage DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override NestedMessage DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override NestedMessage ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable; }
-        }
-
-        public const int OoFieldNumber = 2;
-        private bool hasOo;
-        private long oo_;
-        public bool HasOo {
-          get { return hasOo; }
-        }
-        public long Oo {
-          get { return oo_; }
-        }
-
-        public const int BbFieldNumber = 1;
-        private bool hasBb;
-        private int bb_;
-        public bool HasBb {
-          get { return hasBb; }
-        }
-        public int Bb {
-          get { return bb_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _nestedMessageFieldNames;
-          if (hasBb) {
-            output.WriteInt32(1, field_names[0], Bb);
-          }
-          if (hasOo) {
-            output.WriteInt64(2, field_names[1], Oo);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasOo) {
-            size += pb::CodedOutputStream.ComputeInt64Size(2, Oo);
-          }
-          if (hasBb) {
-            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private NestedMessage MakeReadOnly() {
-          return this;
-        }
-
-        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(NestedMessage prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(NestedMessage cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private NestedMessage result;
-
-          private NestedMessage PrepareBuilder() {
-            if (resultIsReadOnly) {
-              NestedMessage original = result;
-              result = new NestedMessage();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override NestedMessage MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.Descriptor; }
-          }
-
-          public override NestedMessage DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.DefaultInstance; }
-          }
-
-          public override NestedMessage BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is NestedMessage) {
-              return MergeFrom((NestedMessage) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(NestedMessage other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasOo) {
-              Oo = other.Oo;
-            }
-            if (other.HasBb) {
-              Bb = other.Bb;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _nestedMessageFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 8: {
-                  result.hasBb = input.ReadInt32(ref result.bb_);
-                  break;
-                }
-                case 16: {
-                  result.hasOo = input.ReadInt64(ref result.oo_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasOo {
-            get { return result.hasOo; }
-          }
-          public long Oo {
-            get { return result.Oo; }
-            set { SetOo(value); }
-          }
-          public Builder SetOo(long value) {
-            PrepareBuilder();
-            result.hasOo = true;
-            result.oo_ = value;
-            return this;
-          }
-          public Builder ClearOo() {
-            PrepareBuilder();
-            result.hasOo = false;
-            result.oo_ = 0L;
-            return this;
-          }
-
-          public bool HasBb {
-            get { return result.hasBb; }
-          }
-          public int Bb {
-            get { return result.Bb; }
-            set { SetBb(value); }
-          }
-          public Builder SetBb(int value) {
-            PrepareBuilder();
-            result.hasBb = true;
-            result.bb_ = value;
-            return this;
-          }
-          public Builder ClearBb() {
-            PrepareBuilder();
-            result.hasBb = false;
-            result.bb_ = 0;
-            return this;
-          }
-        }
-        static NestedMessage() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int MyStringFieldNumber = 11;
-    private bool hasMyString;
-    private string myString_ = "";
-    public bool HasMyString {
-      get { return hasMyString; }
-    }
-    public string MyString {
-      get { return myString_; }
-    }
-
-    public const int MyIntFieldNumber = 1;
-    private bool hasMyInt;
-    private long myInt_;
-    public bool HasMyInt {
-      get { return hasMyInt; }
-    }
-    public long MyInt {
-      get { return myInt_; }
-    }
-
-    public const int MyFloatFieldNumber = 101;
-    private bool hasMyFloat;
-    private float myFloat_;
-    public bool HasMyFloat {
-      get { return hasMyFloat; }
-    }
-    public float MyFloat {
-      get { return myFloat_; }
-    }
-
-    public const int OptionalNestedMessageFieldNumber = 200;
-    private bool hasOptionalNestedMessage;
-    private global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage optionalNestedMessage_;
-    public bool HasOptionalNestedMessage {
-      get { return hasOptionalNestedMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage OptionalNestedMessage {
-      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testFieldOrderingsFieldNames;
-      pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (hasMyInt) {
-        output.WriteInt64(1, field_names[1], MyInt);
-      }
-      extensionWriter.WriteUntil(11, output);
-      if (hasMyString) {
-        output.WriteString(11, field_names[2], MyString);
-      }
-      extensionWriter.WriteUntil(101, output);
-      if (hasMyFloat) {
-        output.WriteFloat(101, field_names[0], MyFloat);
-      }
-      if (hasOptionalNestedMessage) {
-        output.WriteMessage(200, field_names[3], OptionalNestedMessage);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasMyString) {
-        size += pb::CodedOutputStream.ComputeStringSize(11, MyString);
-      }
-      if (hasMyInt) {
-        size += pb::CodedOutputStream.ComputeInt64Size(1, MyInt);
-      }
-      if (hasMyFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(101, MyFloat);
-      }
-      if (hasOptionalNestedMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(200, OptionalNestedMessage);
-      }
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestFieldOrderings ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestFieldOrderings ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestFieldOrderings ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestFieldOrderings ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestFieldOrderings ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestFieldOrderings ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestFieldOrderings ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestFieldOrderings ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestFieldOrderings ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestFieldOrderings ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestFieldOrderings MakeReadOnly() {
-      return this;
-    }
-
-    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(TestFieldOrderings prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestFieldOrderings, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestFieldOrderings cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestFieldOrderings result;
-
-      private TestFieldOrderings PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestFieldOrderings original = result;
-          result = new TestFieldOrderings();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestFieldOrderings MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Descriptor; }
-      }
-
-      public override TestFieldOrderings DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.DefaultInstance; }
-      }
-
-      public override TestFieldOrderings BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestFieldOrderings) {
-          return MergeFrom((TestFieldOrderings) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestFieldOrderings other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasMyString) {
-          MyString = other.MyString;
-        }
-        if (other.HasMyInt) {
-          MyInt = other.MyInt;
-        }
-        if (other.HasMyFloat) {
-          MyFloat = other.MyFloat;
-        }
-        if (other.HasOptionalNestedMessage) {
-          MergeOptionalNestedMessage(other.OptionalNestedMessage);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testFieldOrderingsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testFieldOrderingsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasMyInt = input.ReadInt64(ref result.myInt_);
-              break;
-            }
-            case 90: {
-              result.hasMyString = input.ReadString(ref result.myString_);
-              break;
-            }
-            case 813: {
-              result.hasMyFloat = input.ReadFloat(ref result.myFloat_);
-              break;
-            }
-            case 1602: {
-              global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.CreateBuilder();
-              if (result.hasOptionalNestedMessage) {
-                subBuilder.MergeFrom(OptionalNestedMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalNestedMessage = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasMyString {
-        get { return result.hasMyString; }
-      }
-      public string MyString {
-        get { return result.MyString; }
-        set { SetMyString(value); }
-      }
-      public Builder SetMyString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasMyString = true;
-        result.myString_ = value;
-        return this;
-      }
-      public Builder ClearMyString() {
-        PrepareBuilder();
-        result.hasMyString = false;
-        result.myString_ = "";
-        return this;
-      }
-
-      public bool HasMyInt {
-        get { return result.hasMyInt; }
-      }
-      public long MyInt {
-        get { return result.MyInt; }
-        set { SetMyInt(value); }
-      }
-      public Builder SetMyInt(long value) {
-        PrepareBuilder();
-        result.hasMyInt = true;
-        result.myInt_ = value;
-        return this;
-      }
-      public Builder ClearMyInt() {
-        PrepareBuilder();
-        result.hasMyInt = false;
-        result.myInt_ = 0L;
-        return this;
-      }
-
-      public bool HasMyFloat {
-        get { return result.hasMyFloat; }
-      }
-      public float MyFloat {
-        get { return result.MyFloat; }
-        set { SetMyFloat(value); }
-      }
-      public Builder SetMyFloat(float value) {
-        PrepareBuilder();
-        result.hasMyFloat = true;
-        result.myFloat_ = value;
-        return this;
-      }
-      public Builder ClearMyFloat() {
-        PrepareBuilder();
-        result.hasMyFloat = false;
-        result.myFloat_ = 0F;
-        return this;
-      }
-
-      public bool HasOptionalNestedMessage {
-       get { return result.hasOptionalNestedMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage OptionalNestedMessage {
-        get { return result.OptionalNestedMessage; }
-        set { SetOptionalNestedMessage(value); }
-      }
-      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = true;
-        result.optionalNestedMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = true;
-        result.optionalNestedMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalNestedMessage &&
-            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.DefaultInstance) {
-            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalNestedMessage_ = value;
-        }
-        result.hasOptionalNestedMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalNestedMessage() {
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = false;
-        result.optionalNestedMessage_ = null;
-        return this;
-      }
-    }
-    static TestFieldOrderings() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestExtremeDefaultValues : pb::GeneratedMessage<TestExtremeDefaultValues, TestExtremeDefaultValues.Builder> {
-    private TestExtremeDefaultValues() { }
-    private static readonly TestExtremeDefaultValues defaultInstance = new TestExtremeDefaultValues().MakeReadOnly();
-    private static readonly string[] _testExtremeDefaultValuesFieldNames = new string[] { "bytes_with_zero", "cord_with_zero", "cpp_trigraph", "escaped_bytes", "inf_double", "inf_float", "large_float", "large_uint32", "large_uint64", "nan_double", "nan_float", "neg_inf_double", "neg_inf_float", "negative_float", "negative_one_float", "one_float", "really_small_int32", "really_small_int64", "replacement_string", "small_float", "small_int32", "small_int64", "small_negative_float", "string_piece_with_zero", "string_with_zero", "utf8_string", "zero_float" };
-    private static readonly uint[] _testExtremeDefaultValuesFieldTags = new uint[] { 194, 210, 162, 10, 113, 141, 101, 16, 24, 129, 157, 121, 149, 93, 85, 69, 168, 176, 218, 77, 32, 40, 109, 202, 186, 50, 61 };
-    public static TestExtremeDefaultValues DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestExtremeDefaultValues DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestExtremeDefaultValues ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestExtremeDefaultValues, TestExtremeDefaultValues.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable; }
-    }
-
-    public const int EscapedBytesFieldNumber = 1;
-    private bool hasEscapedBytes;
-    private pb::ByteString escapedBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[0].DefaultValue;
-    public bool HasEscapedBytes {
-      get { return hasEscapedBytes; }
-    }
-    public pb::ByteString EscapedBytes {
-      get { return escapedBytes_; }
-    }
-
-    public const int LargeUint32FieldNumber = 2;
-    private bool hasLargeUint32;
-    private uint largeUint32_ = 4294967295;
-    public bool HasLargeUint32 {
-      get { return hasLargeUint32; }
-    }
-    public uint LargeUint32 {
-      get { return largeUint32_; }
-    }
-
-    public const int LargeUint64FieldNumber = 3;
-    private bool hasLargeUint64;
-    private ulong largeUint64_ = 18446744073709551615UL;
-    public bool HasLargeUint64 {
-      get { return hasLargeUint64; }
-    }
-    public ulong LargeUint64 {
-      get { return largeUint64_; }
-    }
-
-    public const int SmallInt32FieldNumber = 4;
-    private bool hasSmallInt32;
-    private int smallInt32_ = -2147483647;
-    public bool HasSmallInt32 {
-      get { return hasSmallInt32; }
-    }
-    public int SmallInt32 {
-      get { return smallInt32_; }
-    }
-
-    public const int SmallInt64FieldNumber = 5;
-    private bool hasSmallInt64;
-    private long smallInt64_ = -9223372036854775807L;
-    public bool HasSmallInt64 {
-      get { return hasSmallInt64; }
-    }
-    public long SmallInt64 {
-      get { return smallInt64_; }
-    }
-
-    public const int ReallySmallInt32FieldNumber = 21;
-    private bool hasReallySmallInt32;
-    private int reallySmallInt32_ = -2147483648;
-    public bool HasReallySmallInt32 {
-      get { return hasReallySmallInt32; }
-    }
-    public int ReallySmallInt32 {
-      get { return reallySmallInt32_; }
-    }
-
-    public const int ReallySmallInt64FieldNumber = 22;
-    private bool hasReallySmallInt64;
-    private long reallySmallInt64_ = -9223372036854775808L;
-    public bool HasReallySmallInt64 {
-      get { return hasReallySmallInt64; }
-    }
-    public long ReallySmallInt64 {
-      get { return reallySmallInt64_; }
-    }
-
-    public const int Utf8StringFieldNumber = 6;
-    private bool hasUtf8String;
-    private string utf8String_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[7].DefaultValue;
-    public bool HasUtf8String {
-      get { return hasUtf8String; }
-    }
-    public string Utf8String {
-      get { return utf8String_; }
-    }
-
-    public const int ZeroFloatFieldNumber = 7;
-    private bool hasZeroFloat;
-    private float zeroFloat_;
-    public bool HasZeroFloat {
-      get { return hasZeroFloat; }
-    }
-    public float ZeroFloat {
-      get { return zeroFloat_; }
-    }
-
-    public const int OneFloatFieldNumber = 8;
-    private bool hasOneFloat;
-    private float oneFloat_ = 1F;
-    public bool HasOneFloat {
-      get { return hasOneFloat; }
-    }
-    public float OneFloat {
-      get { return oneFloat_; }
-    }
-
-    public const int SmallFloatFieldNumber = 9;
-    private bool hasSmallFloat;
-    private float smallFloat_ = 1.5F;
-    public bool HasSmallFloat {
-      get { return hasSmallFloat; }
-    }
-    public float SmallFloat {
-      get { return smallFloat_; }
-    }
-
-    public const int NegativeOneFloatFieldNumber = 10;
-    private bool hasNegativeOneFloat;
-    private float negativeOneFloat_ = -1F;
-    public bool HasNegativeOneFloat {
-      get { return hasNegativeOneFloat; }
-    }
-    public float NegativeOneFloat {
-      get { return negativeOneFloat_; }
-    }
-
-    public const int NegativeFloatFieldNumber = 11;
-    private bool hasNegativeFloat;
-    private float negativeFloat_ = -1.5F;
-    public bool HasNegativeFloat {
-      get { return hasNegativeFloat; }
-    }
-    public float NegativeFloat {
-      get { return negativeFloat_; }
-    }
-
-    public const int LargeFloatFieldNumber = 12;
-    private bool hasLargeFloat;
-    private float largeFloat_ = 2e+08F;
-    public bool HasLargeFloat {
-      get { return hasLargeFloat; }
-    }
-    public float LargeFloat {
-      get { return largeFloat_; }
-    }
-
-    public const int SmallNegativeFloatFieldNumber = 13;
-    private bool hasSmallNegativeFloat;
-    private float smallNegativeFloat_ = -8e-28F;
-    public bool HasSmallNegativeFloat {
-      get { return hasSmallNegativeFloat; }
-    }
-    public float SmallNegativeFloat {
-      get { return smallNegativeFloat_; }
-    }
-
-    public const int InfDoubleFieldNumber = 14;
-    private bool hasInfDouble;
-    private double infDouble_ = double.PositiveInfinity;
-    public bool HasInfDouble {
-      get { return hasInfDouble; }
-    }
-    public double InfDouble {
-      get { return infDouble_; }
-    }
-
-    public const int NegInfDoubleFieldNumber = 15;
-    private bool hasNegInfDouble;
-    private double negInfDouble_ = double.NegativeInfinity;
-    public bool HasNegInfDouble {
-      get { return hasNegInfDouble; }
-    }
-    public double NegInfDouble {
-      get { return negInfDouble_; }
-    }
-
-    public const int NanDoubleFieldNumber = 16;
-    private bool hasNanDouble;
-    private double nanDouble_ = double.NaN;
-    public bool HasNanDouble {
-      get { return hasNanDouble; }
-    }
-    public double NanDouble {
-      get { return nanDouble_; }
-    }
-
-    public const int InfFloatFieldNumber = 17;
-    private bool hasInfFloat;
-    private float infFloat_ = float.PositiveInfinity;
-    public bool HasInfFloat {
-      get { return hasInfFloat; }
-    }
-    public float InfFloat {
-      get { return infFloat_; }
-    }
-
-    public const int NegInfFloatFieldNumber = 18;
-    private bool hasNegInfFloat;
-    private float negInfFloat_ = float.NegativeInfinity;
-    public bool HasNegInfFloat {
-      get { return hasNegInfFloat; }
-    }
-    public float NegInfFloat {
-      get { return negInfFloat_; }
-    }
-
-    public const int NanFloatFieldNumber = 19;
-    private bool hasNanFloat;
-    private float nanFloat_ = float.NaN;
-    public bool HasNanFloat {
-      get { return hasNanFloat; }
-    }
-    public float NanFloat {
-      get { return nanFloat_; }
-    }
-
-    public const int CppTrigraphFieldNumber = 20;
-    private bool hasCppTrigraph;
-    private string cppTrigraph_ = "? ? ?? ?? ??? ??/ ??-";
-    public bool HasCppTrigraph {
-      get { return hasCppTrigraph; }
-    }
-    public string CppTrigraph {
-      get { return cppTrigraph_; }
-    }
-
-    public const int StringWithZeroFieldNumber = 23;
-    private bool hasStringWithZero;
-    private string stringWithZero_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[22].DefaultValue;
-    public bool HasStringWithZero {
-      get { return hasStringWithZero; }
-    }
-    public string StringWithZero {
-      get { return stringWithZero_; }
-    }
-
-    public const int BytesWithZeroFieldNumber = 24;
-    private bool hasBytesWithZero;
-    private pb::ByteString bytesWithZero_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[23].DefaultValue;
-    public bool HasBytesWithZero {
-      get { return hasBytesWithZero; }
-    }
-    public pb::ByteString BytesWithZero {
-      get { return bytesWithZero_; }
-    }
-
-    public const int StringPieceWithZeroFieldNumber = 25;
-    private bool hasStringPieceWithZero;
-    private string stringPieceWithZero_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[24].DefaultValue;
-    public bool HasStringPieceWithZero {
-      get { return hasStringPieceWithZero; }
-    }
-    public string StringPieceWithZero {
-      get { return stringPieceWithZero_; }
-    }
-
-    public const int CordWithZeroFieldNumber = 26;
-    private bool hasCordWithZero;
-    private string cordWithZero_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[25].DefaultValue;
-    public bool HasCordWithZero {
-      get { return hasCordWithZero; }
-    }
-    public string CordWithZero {
-      get { return cordWithZero_; }
-    }
-
-    public const int ReplacementStringFieldNumber = 27;
-    private bool hasReplacementString;
-    private string replacementString_ = "${unknown}";
-    public bool HasReplacementString {
-      get { return hasReplacementString; }
-    }
-    public string ReplacementString {
-      get { return replacementString_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testExtremeDefaultValuesFieldNames;
-      if (hasEscapedBytes) {
-        output.WriteBytes(1, field_names[3], EscapedBytes);
-      }
-      if (hasLargeUint32) {
-        output.WriteUInt32(2, field_names[7], LargeUint32);
-      }
-      if (hasLargeUint64) {
-        output.WriteUInt64(3, field_names[8], LargeUint64);
-      }
-      if (hasSmallInt32) {
-        output.WriteInt32(4, field_names[20], SmallInt32);
-      }
-      if (hasSmallInt64) {
-        output.WriteInt64(5, field_names[21], SmallInt64);
-      }
-      if (hasUtf8String) {
-        output.WriteString(6, field_names[25], Utf8String);
-      }
-      if (hasZeroFloat) {
-        output.WriteFloat(7, field_names[26], ZeroFloat);
-      }
-      if (hasOneFloat) {
-        output.WriteFloat(8, field_names[15], OneFloat);
-      }
-      if (hasSmallFloat) {
-        output.WriteFloat(9, field_names[19], SmallFloat);
-      }
-      if (hasNegativeOneFloat) {
-        output.WriteFloat(10, field_names[14], NegativeOneFloat);
-      }
-      if (hasNegativeFloat) {
-        output.WriteFloat(11, field_names[13], NegativeFloat);
-      }
-      if (hasLargeFloat) {
-        output.WriteFloat(12, field_names[6], LargeFloat);
-      }
-      if (hasSmallNegativeFloat) {
-        output.WriteFloat(13, field_names[22], SmallNegativeFloat);
-      }
-      if (hasInfDouble) {
-        output.WriteDouble(14, field_names[4], InfDouble);
-      }
-      if (hasNegInfDouble) {
-        output.WriteDouble(15, field_names[11], NegInfDouble);
-      }
-      if (hasNanDouble) {
-        output.WriteDouble(16, field_names[9], NanDouble);
-      }
-      if (hasInfFloat) {
-        output.WriteFloat(17, field_names[5], InfFloat);
-      }
-      if (hasNegInfFloat) {
-        output.WriteFloat(18, field_names[12], NegInfFloat);
-      }
-      if (hasNanFloat) {
-        output.WriteFloat(19, field_names[10], NanFloat);
-      }
-      if (hasCppTrigraph) {
-        output.WriteString(20, field_names[2], CppTrigraph);
-      }
-      if (hasReallySmallInt32) {
-        output.WriteInt32(21, field_names[16], ReallySmallInt32);
-      }
-      if (hasReallySmallInt64) {
-        output.WriteInt64(22, field_names[17], ReallySmallInt64);
-      }
-      if (hasStringWithZero) {
-        output.WriteString(23, field_names[24], StringWithZero);
-      }
-      if (hasBytesWithZero) {
-        output.WriteBytes(24, field_names[0], BytesWithZero);
-      }
-      if (hasStringPieceWithZero) {
-        output.WriteString(25, field_names[23], StringPieceWithZero);
-      }
-      if (hasCordWithZero) {
-        output.WriteString(26, field_names[1], CordWithZero);
-      }
-      if (hasReplacementString) {
-        output.WriteString(27, field_names[18], ReplacementString);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasEscapedBytes) {
-        size += pb::CodedOutputStream.ComputeBytesSize(1, EscapedBytes);
-      }
-      if (hasLargeUint32) {
-        size += pb::CodedOutputStream.ComputeUInt32Size(2, LargeUint32);
-      }
-      if (hasLargeUint64) {
-        size += pb::CodedOutputStream.ComputeUInt64Size(3, LargeUint64);
-      }
-      if (hasSmallInt32) {
-        size += pb::CodedOutputStream.ComputeInt32Size(4, SmallInt32);
-      }
-      if (hasSmallInt64) {
-        size += pb::CodedOutputStream.ComputeInt64Size(5, SmallInt64);
-      }
-      if (hasReallySmallInt32) {
-        size += pb::CodedOutputStream.ComputeInt32Size(21, ReallySmallInt32);
-      }
-      if (hasReallySmallInt64) {
-        size += pb::CodedOutputStream.ComputeInt64Size(22, ReallySmallInt64);
-      }
-      if (hasUtf8String) {
-        size += pb::CodedOutputStream.ComputeStringSize(6, Utf8String);
-      }
-      if (hasZeroFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(7, ZeroFloat);
-      }
-      if (hasOneFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(8, OneFloat);
-      }
-      if (hasSmallFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(9, SmallFloat);
-      }
-      if (hasNegativeOneFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(10, NegativeOneFloat);
-      }
-      if (hasNegativeFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(11, NegativeFloat);
-      }
-      if (hasLargeFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(12, LargeFloat);
-      }
-      if (hasSmallNegativeFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(13, SmallNegativeFloat);
-      }
-      if (hasInfDouble) {
-        size += pb::CodedOutputStream.ComputeDoubleSize(14, InfDouble);
-      }
-      if (hasNegInfDouble) {
-        size += pb::CodedOutputStream.ComputeDoubleSize(15, NegInfDouble);
-      }
-      if (hasNanDouble) {
-        size += pb::CodedOutputStream.ComputeDoubleSize(16, NanDouble);
-      }
-      if (hasInfFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(17, InfFloat);
-      }
-      if (hasNegInfFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(18, NegInfFloat);
-      }
-      if (hasNanFloat) {
-        size += pb::CodedOutputStream.ComputeFloatSize(19, NanFloat);
-      }
-      if (hasCppTrigraph) {
-        size += pb::CodedOutputStream.ComputeStringSize(20, CppTrigraph);
-      }
-      if (hasStringWithZero) {
-        size += pb::CodedOutputStream.ComputeStringSize(23, StringWithZero);
-      }
-      if (hasBytesWithZero) {
-        size += pb::CodedOutputStream.ComputeBytesSize(24, BytesWithZero);
-      }
-      if (hasStringPieceWithZero) {
-        size += pb::CodedOutputStream.ComputeStringSize(25, StringPieceWithZero);
-      }
-      if (hasCordWithZero) {
-        size += pb::CodedOutputStream.ComputeStringSize(26, CordWithZero);
-      }
-      if (hasReplacementString) {
-        size += pb::CodedOutputStream.ComputeStringSize(27, ReplacementString);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestExtremeDefaultValues ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestExtremeDefaultValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestExtremeDefaultValues MakeReadOnly() {
-      return this;
-    }
-
-    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(TestExtremeDefaultValues prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestExtremeDefaultValues, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestExtremeDefaultValues cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestExtremeDefaultValues result;
-
-      private TestExtremeDefaultValues PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestExtremeDefaultValues original = result;
-          result = new TestExtremeDefaultValues();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestExtremeDefaultValues MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor; }
-      }
-
-      public override TestExtremeDefaultValues DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.DefaultInstance; }
-      }
-
-      public override TestExtremeDefaultValues BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestExtremeDefaultValues) {
-          return MergeFrom((TestExtremeDefaultValues) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestExtremeDefaultValues other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasEscapedBytes) {
-          EscapedBytes = other.EscapedBytes;
-        }
-        if (other.HasLargeUint32) {
-          LargeUint32 = other.LargeUint32;
-        }
-        if (other.HasLargeUint64) {
-          LargeUint64 = other.LargeUint64;
-        }
-        if (other.HasSmallInt32) {
-          SmallInt32 = other.SmallInt32;
-        }
-        if (other.HasSmallInt64) {
-          SmallInt64 = other.SmallInt64;
-        }
-        if (other.HasReallySmallInt32) {
-          ReallySmallInt32 = other.ReallySmallInt32;
-        }
-        if (other.HasReallySmallInt64) {
-          ReallySmallInt64 = other.ReallySmallInt64;
-        }
-        if (other.HasUtf8String) {
-          Utf8String = other.Utf8String;
-        }
-        if (other.HasZeroFloat) {
-          ZeroFloat = other.ZeroFloat;
-        }
-        if (other.HasOneFloat) {
-          OneFloat = other.OneFloat;
-        }
-        if (other.HasSmallFloat) {
-          SmallFloat = other.SmallFloat;
-        }
-        if (other.HasNegativeOneFloat) {
-          NegativeOneFloat = other.NegativeOneFloat;
-        }
-        if (other.HasNegativeFloat) {
-          NegativeFloat = other.NegativeFloat;
-        }
-        if (other.HasLargeFloat) {
-          LargeFloat = other.LargeFloat;
-        }
-        if (other.HasSmallNegativeFloat) {
-          SmallNegativeFloat = other.SmallNegativeFloat;
-        }
-        if (other.HasInfDouble) {
-          InfDouble = other.InfDouble;
-        }
-        if (other.HasNegInfDouble) {
-          NegInfDouble = other.NegInfDouble;
-        }
-        if (other.HasNanDouble) {
-          NanDouble = other.NanDouble;
-        }
-        if (other.HasInfFloat) {
-          InfFloat = other.InfFloat;
-        }
-        if (other.HasNegInfFloat) {
-          NegInfFloat = other.NegInfFloat;
-        }
-        if (other.HasNanFloat) {
-          NanFloat = other.NanFloat;
-        }
-        if (other.HasCppTrigraph) {
-          CppTrigraph = other.CppTrigraph;
-        }
-        if (other.HasStringWithZero) {
-          StringWithZero = other.StringWithZero;
-        }
-        if (other.HasBytesWithZero) {
-          BytesWithZero = other.BytesWithZero;
-        }
-        if (other.HasStringPieceWithZero) {
-          StringPieceWithZero = other.StringPieceWithZero;
-        }
-        if (other.HasCordWithZero) {
-          CordWithZero = other.CordWithZero;
-        }
-        if (other.HasReplacementString) {
-          ReplacementString = other.ReplacementString;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testExtremeDefaultValuesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testExtremeDefaultValuesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              result.hasEscapedBytes = input.ReadBytes(ref result.escapedBytes_);
-              break;
-            }
-            case 16: {
-              result.hasLargeUint32 = input.ReadUInt32(ref result.largeUint32_);
-              break;
-            }
-            case 24: {
-              result.hasLargeUint64 = input.ReadUInt64(ref result.largeUint64_);
-              break;
-            }
-            case 32: {
-              result.hasSmallInt32 = input.ReadInt32(ref result.smallInt32_);
-              break;
-            }
-            case 40: {
-              result.hasSmallInt64 = input.ReadInt64(ref result.smallInt64_);
-              break;
-            }
-            case 50: {
-              result.hasUtf8String = input.ReadString(ref result.utf8String_);
-              break;
-            }
-            case 61: {
-              result.hasZeroFloat = input.ReadFloat(ref result.zeroFloat_);
-              break;
-            }
-            case 69: {
-              result.hasOneFloat = input.ReadFloat(ref result.oneFloat_);
-              break;
-            }
-            case 77: {
-              result.hasSmallFloat = input.ReadFloat(ref result.smallFloat_);
-              break;
-            }
-            case 85: {
-              result.hasNegativeOneFloat = input.ReadFloat(ref result.negativeOneFloat_);
-              break;
-            }
-            case 93: {
-              result.hasNegativeFloat = input.ReadFloat(ref result.negativeFloat_);
-              break;
-            }
-            case 101: {
-              result.hasLargeFloat = input.ReadFloat(ref result.largeFloat_);
-              break;
-            }
-            case 109: {
-              result.hasSmallNegativeFloat = input.ReadFloat(ref result.smallNegativeFloat_);
-              break;
-            }
-            case 113: {
-              result.hasInfDouble = input.ReadDouble(ref result.infDouble_);
-              break;
-            }
-            case 121: {
-              result.hasNegInfDouble = input.ReadDouble(ref result.negInfDouble_);
-              break;
-            }
-            case 129: {
-              result.hasNanDouble = input.ReadDouble(ref result.nanDouble_);
-              break;
-            }
-            case 141: {
-              result.hasInfFloat = input.ReadFloat(ref result.infFloat_);
-              break;
-            }
-            case 149: {
-              result.hasNegInfFloat = input.ReadFloat(ref result.negInfFloat_);
-              break;
-            }
-            case 157: {
-              result.hasNanFloat = input.ReadFloat(ref result.nanFloat_);
-              break;
-            }
-            case 162: {
-              result.hasCppTrigraph = input.ReadString(ref result.cppTrigraph_);
-              break;
-            }
-            case 168: {
-              result.hasReallySmallInt32 = input.ReadInt32(ref result.reallySmallInt32_);
-              break;
-            }
-            case 176: {
-              result.hasReallySmallInt64 = input.ReadInt64(ref result.reallySmallInt64_);
-              break;
-            }
-            case 186: {
-              result.hasStringWithZero = input.ReadString(ref result.stringWithZero_);
-              break;
-            }
-            case 194: {
-              result.hasBytesWithZero = input.ReadBytes(ref result.bytesWithZero_);
-              break;
-            }
-            case 202: {
-              result.hasStringPieceWithZero = input.ReadString(ref result.stringPieceWithZero_);
-              break;
-            }
-            case 210: {
-              result.hasCordWithZero = input.ReadString(ref result.cordWithZero_);
-              break;
-            }
-            case 218: {
-              result.hasReplacementString = input.ReadString(ref result.replacementString_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasEscapedBytes {
-        get { return result.hasEscapedBytes; }
-      }
-      public pb::ByteString EscapedBytes {
-        get { return result.EscapedBytes; }
-        set { SetEscapedBytes(value); }
-      }
-      public Builder SetEscapedBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasEscapedBytes = true;
-        result.escapedBytes_ = value;
-        return this;
-      }
-      public Builder ClearEscapedBytes() {
-        PrepareBuilder();
-        result.hasEscapedBytes = false;
-        result.escapedBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[0].DefaultValue;
-        return this;
-      }
-
-      public bool HasLargeUint32 {
-        get { return result.hasLargeUint32; }
-      }
-      public uint LargeUint32 {
-        get { return result.LargeUint32; }
-        set { SetLargeUint32(value); }
-      }
-      public Builder SetLargeUint32(uint value) {
-        PrepareBuilder();
-        result.hasLargeUint32 = true;
-        result.largeUint32_ = value;
-        return this;
-      }
-      public Builder ClearLargeUint32() {
-        PrepareBuilder();
-        result.hasLargeUint32 = false;
-        result.largeUint32_ = 4294967295;
-        return this;
-      }
-
-      public bool HasLargeUint64 {
-        get { return result.hasLargeUint64; }
-      }
-      public ulong LargeUint64 {
-        get { return result.LargeUint64; }
-        set { SetLargeUint64(value); }
-      }
-      public Builder SetLargeUint64(ulong value) {
-        PrepareBuilder();
-        result.hasLargeUint64 = true;
-        result.largeUint64_ = value;
-        return this;
-      }
-      public Builder ClearLargeUint64() {
-        PrepareBuilder();
-        result.hasLargeUint64 = false;
-        result.largeUint64_ = 18446744073709551615UL;
-        return this;
-      }
-
-      public bool HasSmallInt32 {
-        get { return result.hasSmallInt32; }
-      }
-      public int SmallInt32 {
-        get { return result.SmallInt32; }
-        set { SetSmallInt32(value); }
-      }
-      public Builder SetSmallInt32(int value) {
-        PrepareBuilder();
-        result.hasSmallInt32 = true;
-        result.smallInt32_ = value;
-        return this;
-      }
-      public Builder ClearSmallInt32() {
-        PrepareBuilder();
-        result.hasSmallInt32 = false;
-        result.smallInt32_ = -2147483647;
-        return this;
-      }
-
-      public bool HasSmallInt64 {
-        get { return result.hasSmallInt64; }
-      }
-      public long SmallInt64 {
-        get { return result.SmallInt64; }
-        set { SetSmallInt64(value); }
-      }
-      public Builder SetSmallInt64(long value) {
-        PrepareBuilder();
-        result.hasSmallInt64 = true;
-        result.smallInt64_ = value;
-        return this;
-      }
-      public Builder ClearSmallInt64() {
-        PrepareBuilder();
-        result.hasSmallInt64 = false;
-        result.smallInt64_ = -9223372036854775807L;
-        return this;
-      }
-
-      public bool HasReallySmallInt32 {
-        get { return result.hasReallySmallInt32; }
-      }
-      public int ReallySmallInt32 {
-        get { return result.ReallySmallInt32; }
-        set { SetReallySmallInt32(value); }
-      }
-      public Builder SetReallySmallInt32(int value) {
-        PrepareBuilder();
-        result.hasReallySmallInt32 = true;
-        result.reallySmallInt32_ = value;
-        return this;
-      }
-      public Builder ClearReallySmallInt32() {
-        PrepareBuilder();
-        result.hasReallySmallInt32 = false;
-        result.reallySmallInt32_ = -2147483648;
-        return this;
-      }
-
-      public bool HasReallySmallInt64 {
-        get { return result.hasReallySmallInt64; }
-      }
-      public long ReallySmallInt64 {
-        get { return result.ReallySmallInt64; }
-        set { SetReallySmallInt64(value); }
-      }
-      public Builder SetReallySmallInt64(long value) {
-        PrepareBuilder();
-        result.hasReallySmallInt64 = true;
-        result.reallySmallInt64_ = value;
-        return this;
-      }
-      public Builder ClearReallySmallInt64() {
-        PrepareBuilder();
-        result.hasReallySmallInt64 = false;
-        result.reallySmallInt64_ = -9223372036854775808L;
-        return this;
-      }
-
-      public bool HasUtf8String {
-        get { return result.hasUtf8String; }
-      }
-      public string Utf8String {
-        get { return result.Utf8String; }
-        set { SetUtf8String(value); }
-      }
-      public Builder SetUtf8String(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasUtf8String = true;
-        result.utf8String_ = value;
-        return this;
-      }
-      public Builder ClearUtf8String() {
-        PrepareBuilder();
-        result.hasUtf8String = false;
-        result.utf8String_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[7].DefaultValue;
-        return this;
-      }
-
-      public bool HasZeroFloat {
-        get { return result.hasZeroFloat; }
-      }
-      public float ZeroFloat {
-        get { return result.ZeroFloat; }
-        set { SetZeroFloat(value); }
-      }
-      public Builder SetZeroFloat(float value) {
-        PrepareBuilder();
-        result.hasZeroFloat = true;
-        result.zeroFloat_ = value;
-        return this;
-      }
-      public Builder ClearZeroFloat() {
-        PrepareBuilder();
-        result.hasZeroFloat = false;
-        result.zeroFloat_ = 0F;
-        return this;
-      }
-
-      public bool HasOneFloat {
-        get { return result.hasOneFloat; }
-      }
-      public float OneFloat {
-        get { return result.OneFloat; }
-        set { SetOneFloat(value); }
-      }
-      public Builder SetOneFloat(float value) {
-        PrepareBuilder();
-        result.hasOneFloat = true;
-        result.oneFloat_ = value;
-        return this;
-      }
-      public Builder ClearOneFloat() {
-        PrepareBuilder();
-        result.hasOneFloat = false;
-        result.oneFloat_ = 1F;
-        return this;
-      }
-
-      public bool HasSmallFloat {
-        get { return result.hasSmallFloat; }
-      }
-      public float SmallFloat {
-        get { return result.SmallFloat; }
-        set { SetSmallFloat(value); }
-      }
-      public Builder SetSmallFloat(float value) {
-        PrepareBuilder();
-        result.hasSmallFloat = true;
-        result.smallFloat_ = value;
-        return this;
-      }
-      public Builder ClearSmallFloat() {
-        PrepareBuilder();
-        result.hasSmallFloat = false;
-        result.smallFloat_ = 1.5F;
-        return this;
-      }
-
-      public bool HasNegativeOneFloat {
-        get { return result.hasNegativeOneFloat; }
-      }
-      public float NegativeOneFloat {
-        get { return result.NegativeOneFloat; }
-        set { SetNegativeOneFloat(value); }
-      }
-      public Builder SetNegativeOneFloat(float value) {
-        PrepareBuilder();
-        result.hasNegativeOneFloat = true;
-        result.negativeOneFloat_ = value;
-        return this;
-      }
-      public Builder ClearNegativeOneFloat() {
-        PrepareBuilder();
-        result.hasNegativeOneFloat = false;
-        result.negativeOneFloat_ = -1F;
-        return this;
-      }
-
-      public bool HasNegativeFloat {
-        get { return result.hasNegativeFloat; }
-      }
-      public float NegativeFloat {
-        get { return result.NegativeFloat; }
-        set { SetNegativeFloat(value); }
-      }
-      public Builder SetNegativeFloat(float value) {
-        PrepareBuilder();
-        result.hasNegativeFloat = true;
-        result.negativeFloat_ = value;
-        return this;
-      }
-      public Builder ClearNegativeFloat() {
-        PrepareBuilder();
-        result.hasNegativeFloat = false;
-        result.negativeFloat_ = -1.5F;
-        return this;
-      }
-
-      public bool HasLargeFloat {
-        get { return result.hasLargeFloat; }
-      }
-      public float LargeFloat {
-        get { return result.LargeFloat; }
-        set { SetLargeFloat(value); }
-      }
-      public Builder SetLargeFloat(float value) {
-        PrepareBuilder();
-        result.hasLargeFloat = true;
-        result.largeFloat_ = value;
-        return this;
-      }
-      public Builder ClearLargeFloat() {
-        PrepareBuilder();
-        result.hasLargeFloat = false;
-        result.largeFloat_ = 2e+08F;
-        return this;
-      }
-
-      public bool HasSmallNegativeFloat {
-        get { return result.hasSmallNegativeFloat; }
-      }
-      public float SmallNegativeFloat {
-        get { return result.SmallNegativeFloat; }
-        set { SetSmallNegativeFloat(value); }
-      }
-      public Builder SetSmallNegativeFloat(float value) {
-        PrepareBuilder();
-        result.hasSmallNegativeFloat = true;
-        result.smallNegativeFloat_ = value;
-        return this;
-      }
-      public Builder ClearSmallNegativeFloat() {
-        PrepareBuilder();
-        result.hasSmallNegativeFloat = false;
-        result.smallNegativeFloat_ = -8e-28F;
-        return this;
-      }
-
-      public bool HasInfDouble {
-        get { return result.hasInfDouble; }
-      }
-      public double InfDouble {
-        get { return result.InfDouble; }
-        set { SetInfDouble(value); }
-      }
-      public Builder SetInfDouble(double value) {
-        PrepareBuilder();
-        result.hasInfDouble = true;
-        result.infDouble_ = value;
-        return this;
-      }
-      public Builder ClearInfDouble() {
-        PrepareBuilder();
-        result.hasInfDouble = false;
-        result.infDouble_ = double.PositiveInfinity;
-        return this;
-      }
-
-      public bool HasNegInfDouble {
-        get { return result.hasNegInfDouble; }
-      }
-      public double NegInfDouble {
-        get { return result.NegInfDouble; }
-        set { SetNegInfDouble(value); }
-      }
-      public Builder SetNegInfDouble(double value) {
-        PrepareBuilder();
-        result.hasNegInfDouble = true;
-        result.negInfDouble_ = value;
-        return this;
-      }
-      public Builder ClearNegInfDouble() {
-        PrepareBuilder();
-        result.hasNegInfDouble = false;
-        result.negInfDouble_ = double.NegativeInfinity;
-        return this;
-      }
-
-      public bool HasNanDouble {
-        get { return result.hasNanDouble; }
-      }
-      public double NanDouble {
-        get { return result.NanDouble; }
-        set { SetNanDouble(value); }
-      }
-      public Builder SetNanDouble(double value) {
-        PrepareBuilder();
-        result.hasNanDouble = true;
-        result.nanDouble_ = value;
-        return this;
-      }
-      public Builder ClearNanDouble() {
-        PrepareBuilder();
-        result.hasNanDouble = false;
-        result.nanDouble_ = double.NaN;
-        return this;
-      }
-
-      public bool HasInfFloat {
-        get { return result.hasInfFloat; }
-      }
-      public float InfFloat {
-        get { return result.InfFloat; }
-        set { SetInfFloat(value); }
-      }
-      public Builder SetInfFloat(float value) {
-        PrepareBuilder();
-        result.hasInfFloat = true;
-        result.infFloat_ = value;
-        return this;
-      }
-      public Builder ClearInfFloat() {
-        PrepareBuilder();
-        result.hasInfFloat = false;
-        result.infFloat_ = float.PositiveInfinity;
-        return this;
-      }
-
-      public bool HasNegInfFloat {
-        get { return result.hasNegInfFloat; }
-      }
-      public float NegInfFloat {
-        get { return result.NegInfFloat; }
-        set { SetNegInfFloat(value); }
-      }
-      public Builder SetNegInfFloat(float value) {
-        PrepareBuilder();
-        result.hasNegInfFloat = true;
-        result.negInfFloat_ = value;
-        return this;
-      }
-      public Builder ClearNegInfFloat() {
-        PrepareBuilder();
-        result.hasNegInfFloat = false;
-        result.negInfFloat_ = float.NegativeInfinity;
-        return this;
-      }
-
-      public bool HasNanFloat {
-        get { return result.hasNanFloat; }
-      }
-      public float NanFloat {
-        get { return result.NanFloat; }
-        set { SetNanFloat(value); }
-      }
-      public Builder SetNanFloat(float value) {
-        PrepareBuilder();
-        result.hasNanFloat = true;
-        result.nanFloat_ = value;
-        return this;
-      }
-      public Builder ClearNanFloat() {
-        PrepareBuilder();
-        result.hasNanFloat = false;
-        result.nanFloat_ = float.NaN;
-        return this;
-      }
-
-      public bool HasCppTrigraph {
-        get { return result.hasCppTrigraph; }
-      }
-      public string CppTrigraph {
-        get { return result.CppTrigraph; }
-        set { SetCppTrigraph(value); }
-      }
-      public Builder SetCppTrigraph(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasCppTrigraph = true;
-        result.cppTrigraph_ = value;
-        return this;
-      }
-      public Builder ClearCppTrigraph() {
-        PrepareBuilder();
-        result.hasCppTrigraph = false;
-        result.cppTrigraph_ = "? ? ?? ?? ??? ??/ ??-";
-        return this;
-      }
-
-      public bool HasStringWithZero {
-        get { return result.hasStringWithZero; }
-      }
-      public string StringWithZero {
-        get { return result.StringWithZero; }
-        set { SetStringWithZero(value); }
-      }
-      public Builder SetStringWithZero(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasStringWithZero = true;
-        result.stringWithZero_ = value;
-        return this;
-      }
-      public Builder ClearStringWithZero() {
-        PrepareBuilder();
-        result.hasStringWithZero = false;
-        result.stringWithZero_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[22].DefaultValue;
-        return this;
-      }
-
-      public bool HasBytesWithZero {
-        get { return result.hasBytesWithZero; }
-      }
-      public pb::ByteString BytesWithZero {
-        get { return result.BytesWithZero; }
-        set { SetBytesWithZero(value); }
-      }
-      public Builder SetBytesWithZero(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasBytesWithZero = true;
-        result.bytesWithZero_ = value;
-        return this;
-      }
-      public Builder ClearBytesWithZero() {
-        PrepareBuilder();
-        result.hasBytesWithZero = false;
-        result.bytesWithZero_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[23].DefaultValue;
-        return this;
-      }
-
-      public bool HasStringPieceWithZero {
-        get { return result.hasStringPieceWithZero; }
-      }
-      public string StringPieceWithZero {
-        get { return result.StringPieceWithZero; }
-        set { SetStringPieceWithZero(value); }
-      }
-      public Builder SetStringPieceWithZero(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasStringPieceWithZero = true;
-        result.stringPieceWithZero_ = value;
-        return this;
-      }
-      public Builder ClearStringPieceWithZero() {
-        PrepareBuilder();
-        result.hasStringPieceWithZero = false;
-        result.stringPieceWithZero_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[24].DefaultValue;
-        return this;
-      }
-
-      public bool HasCordWithZero {
-        get { return result.hasCordWithZero; }
-      }
-      public string CordWithZero {
-        get { return result.CordWithZero; }
-        set { SetCordWithZero(value); }
-      }
-      public Builder SetCordWithZero(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasCordWithZero = true;
-        result.cordWithZero_ = value;
-        return this;
-      }
-      public Builder ClearCordWithZero() {
-        PrepareBuilder();
-        result.hasCordWithZero = false;
-        result.cordWithZero_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[25].DefaultValue;
-        return this;
-      }
-
-      public bool HasReplacementString {
-        get { return result.hasReplacementString; }
-      }
-      public string ReplacementString {
-        get { return result.ReplacementString; }
-        set { SetReplacementString(value); }
-      }
-      public Builder SetReplacementString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasReplacementString = true;
-        result.replacementString_ = value;
-        return this;
-      }
-      public Builder ClearReplacementString() {
-        PrepareBuilder();
-        result.hasReplacementString = false;
-        result.replacementString_ = "${unknown}";
-        return this;
-      }
-    }
-    static TestExtremeDefaultValues() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SparseEnumMessage : pb::GeneratedMessage<SparseEnumMessage, SparseEnumMessage.Builder> {
-    private SparseEnumMessage() { }
-    private static readonly SparseEnumMessage defaultInstance = new SparseEnumMessage().MakeReadOnly();
-    private static readonly string[] _sparseEnumMessageFieldNames = new string[] { "sparse_enum" };
-    private static readonly uint[] _sparseEnumMessageFieldTags = new uint[] { 8 };
-    public static SparseEnumMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SparseEnumMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SparseEnumMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_SparseEnumMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SparseEnumMessage, SparseEnumMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable; }
-    }
-
-    public const int SparseEnumFieldNumber = 1;
-    private bool hasSparseEnum;
-    private global::Google.ProtocolBuffers.TestProtos.TestSparseEnum sparseEnum_ = global::Google.ProtocolBuffers.TestProtos.TestSparseEnum.SPARSE_A;
-    public bool HasSparseEnum {
-      get { return hasSparseEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestSparseEnum SparseEnum {
-      get { return sparseEnum_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _sparseEnumMessageFieldNames;
-      if (hasSparseEnum) {
-        output.WriteEnum(1, field_names[0], (int) SparseEnum, SparseEnum);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasSparseEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) SparseEnum);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static SparseEnumMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SparseEnumMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SparseEnumMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SparseEnumMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SparseEnumMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SparseEnumMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SparseEnumMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SparseEnumMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SparseEnumMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SparseEnumMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SparseEnumMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(SparseEnumMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SparseEnumMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SparseEnumMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SparseEnumMessage result;
-
-      private SparseEnumMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SparseEnumMessage original = result;
-          result = new SparseEnumMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SparseEnumMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Descriptor; }
-      }
-
-      public override SparseEnumMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.DefaultInstance; }
-      }
-
-      public override SparseEnumMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is SparseEnumMessage) {
-          return MergeFrom((SparseEnumMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(SparseEnumMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasSparseEnum) {
-          SparseEnum = other.SparseEnum;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_sparseEnumMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _sparseEnumMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              object unknown;
-              if(input.ReadEnum(ref result.sparseEnum_, out unknown)) {
-                result.hasSparseEnum = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(1, (ulong)(int)unknown);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasSparseEnum {
-        get { return result.hasSparseEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestSparseEnum SparseEnum {
-        get { return result.SparseEnum; }
-        set { SetSparseEnum(value); }
-      }
-      public Builder SetSparseEnum(global::Google.ProtocolBuffers.TestProtos.TestSparseEnum value) {
-        PrepareBuilder();
-        result.hasSparseEnum = true;
-        result.sparseEnum_ = value;
-        return this;
-      }
-      public Builder ClearSparseEnum() {
-        PrepareBuilder();
-        result.hasSparseEnum = false;
-        result.sparseEnum_ = global::Google.ProtocolBuffers.TestProtos.TestSparseEnum.SPARSE_A;
-        return this;
-      }
-    }
-    static SparseEnumMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class OneString : pb::GeneratedMessage<OneString, OneString.Builder> {
-    private OneString() { }
-    private static readonly OneString defaultInstance = new OneString().MakeReadOnly();
-    private static readonly string[] _oneStringFieldNames = new string[] { "data" };
-    private static readonly uint[] _oneStringFieldTags = new uint[] { 10 };
-    public static OneString DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override OneString DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override OneString ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_OneString__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<OneString, OneString.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_OneString__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    private bool hasData;
-    private string data_ = "";
-    public bool HasData {
-      get { return hasData; }
-    }
-    public string Data {
-      get { return data_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _oneStringFieldNames;
-      if (hasData) {
-        output.WriteString(1, field_names[0], Data);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasData) {
-        size += pb::CodedOutputStream.ComputeStringSize(1, Data);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static OneString ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static OneString ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static OneString ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static OneString ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static OneString ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static OneString ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static OneString ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static OneString ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static OneString ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static OneString ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private OneString MakeReadOnly() {
-      return this;
-    }
-
-    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(OneString prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<OneString, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(OneString cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private OneString result;
-
-      private OneString PrepareBuilder() {
-        if (resultIsReadOnly) {
-          OneString original = result;
-          result = new OneString();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override OneString MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.OneString.Descriptor; }
-      }
-
-      public override OneString DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.OneString.DefaultInstance; }
-      }
-
-      public override OneString BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is OneString) {
-          return MergeFrom((OneString) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(OneString other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.OneString.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasData) {
-          Data = other.Data;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_oneStringFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _oneStringFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              result.hasData = input.ReadString(ref result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasData {
-        get { return result.hasData; }
-      }
-      public string Data {
-        get { return result.Data; }
-        set { SetData(value); }
-      }
-      public Builder SetData(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasData = true;
-        result.data_ = value;
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.hasData = false;
-        result.data_ = "";
-        return this;
-      }
-    }
-    static OneString() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class MoreString : pb::GeneratedMessage<MoreString, MoreString.Builder> {
-    private MoreString() { }
-    private static readonly MoreString defaultInstance = new MoreString().MakeReadOnly();
-    private static readonly string[] _moreStringFieldNames = new string[] { "data" };
-    private static readonly uint[] _moreStringFieldTags = new uint[] { 10 };
-    public static MoreString DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override MoreString DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override MoreString ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_MoreString__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<MoreString, MoreString.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_MoreString__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    private pbc::PopsicleList<string> data_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> DataList {
-      get { return pbc::Lists.AsReadOnly(data_); }
-    }
-    public int DataCount {
-      get { return data_.Count; }
-    }
-    public string GetData(int index) {
-      return data_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _moreStringFieldNames;
-      if (data_.Count > 0) {
-        output.WriteStringArray(1, field_names[0], data_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      {
-        int dataSize = 0;
-        foreach (string element in DataList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * data_.Count;
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static MoreString ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MoreString ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MoreString ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MoreString ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MoreString ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MoreString ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static MoreString ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static MoreString ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static MoreString ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MoreString ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private MoreString MakeReadOnly() {
-      data_.MakeReadOnly();
-      return this;
-    }
-
-    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(MoreString prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<MoreString, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(MoreString cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private MoreString result;
-
-      private MoreString PrepareBuilder() {
-        if (resultIsReadOnly) {
-          MoreString original = result;
-          result = new MoreString();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override MoreString MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.MoreString.Descriptor; }
-      }
-
-      public override MoreString DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.MoreString.DefaultInstance; }
-      }
-
-      public override MoreString BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is MoreString) {
-          return MergeFrom((MoreString) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(MoreString other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.MoreString.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.data_.Count != 0) {
-          result.data_.Add(other.data_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_moreStringFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _moreStringFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              input.ReadStringArray(tag, field_name, result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public pbc::IPopsicleList<string> DataList {
-        get { return PrepareBuilder().data_; }
-      }
-      public int DataCount {
-        get { return result.DataCount; }
-      }
-      public string GetData(int index) {
-        return result.GetData(index);
-      }
-      public Builder SetData(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.data_[index] = value;
-        return this;
-      }
-      public Builder AddData(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.data_.Add(value);
-        return this;
-      }
-      public Builder AddRangeData(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.data_.Add(values);
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.data_.Clear();
-        return this;
-      }
-    }
-    static MoreString() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class OneBytes : pb::GeneratedMessage<OneBytes, OneBytes.Builder> {
-    private OneBytes() { }
-    private static readonly OneBytes defaultInstance = new OneBytes().MakeReadOnly();
-    private static readonly string[] _oneBytesFieldNames = new string[] { "data" };
-    private static readonly uint[] _oneBytesFieldTags = new uint[] { 10 };
-    public static OneBytes DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override OneBytes DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override OneBytes ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_OneBytes__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<OneBytes, OneBytes.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_OneBytes__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    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::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _oneBytesFieldNames;
-      if (hasData) {
-        output.WriteBytes(1, field_names[0], Data);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasData) {
-        size += pb::CodedOutputStream.ComputeBytesSize(1, Data);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static OneBytes ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static OneBytes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static OneBytes ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static OneBytes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static OneBytes ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static OneBytes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static OneBytes ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static OneBytes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static OneBytes ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static OneBytes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private OneBytes MakeReadOnly() {
-      return this;
-    }
-
-    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(OneBytes prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<OneBytes, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(OneBytes cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private OneBytes result;
-
-      private OneBytes PrepareBuilder() {
-        if (resultIsReadOnly) {
-          OneBytes original = result;
-          result = new OneBytes();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override OneBytes MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.OneBytes.Descriptor; }
-      }
-
-      public override OneBytes DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.OneBytes.DefaultInstance; }
-      }
-
-      public override OneBytes BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is OneBytes) {
-          return MergeFrom((OneBytes) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(OneBytes other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.OneBytes.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasData) {
-          Data = other.Data;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_oneBytesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _oneBytesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              result.hasData = input.ReadBytes(ref result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        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");
-        PrepareBuilder();
-        result.hasData = true;
-        result.data_ = value;
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.hasData = false;
-        result.data_ = pb::ByteString.Empty;
-        return this;
-      }
-    }
-    static OneBytes() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class MoreBytes : pb::GeneratedMessage<MoreBytes, MoreBytes.Builder> {
-    private MoreBytes() { }
-    private static readonly MoreBytes defaultInstance = new MoreBytes().MakeReadOnly();
-    private static readonly string[] _moreBytesFieldNames = new string[] { "data" };
-    private static readonly uint[] _moreBytesFieldTags = new uint[] { 10 };
-    public static MoreBytes DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override MoreBytes DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override MoreBytes ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_MoreBytes__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<MoreBytes, MoreBytes.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    private pbc::PopsicleList<pb::ByteString> data_ = new pbc::PopsicleList<pb::ByteString>();
-    public scg::IList<pb::ByteString> DataList {
-      get { return pbc::Lists.AsReadOnly(data_); }
-    }
-    public int DataCount {
-      get { return data_.Count; }
-    }
-    public pb::ByteString GetData(int index) {
-      return data_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _moreBytesFieldNames;
-      if (data_.Count > 0) {
-        output.WriteBytesArray(1, field_names[0], data_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      {
-        int dataSize = 0;
-        foreach (pb::ByteString element in DataList) {
-          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * data_.Count;
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static MoreBytes ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MoreBytes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MoreBytes ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MoreBytes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MoreBytes ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MoreBytes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static MoreBytes ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static MoreBytes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static MoreBytes ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MoreBytes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private MoreBytes MakeReadOnly() {
-      data_.MakeReadOnly();
-      return this;
-    }
-
-    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(MoreBytes prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<MoreBytes, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(MoreBytes cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private MoreBytes result;
-
-      private MoreBytes PrepareBuilder() {
-        if (resultIsReadOnly) {
-          MoreBytes original = result;
-          result = new MoreBytes();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override MoreBytes MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.MoreBytes.Descriptor; }
-      }
-
-      public override MoreBytes DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.MoreBytes.DefaultInstance; }
-      }
-
-      public override MoreBytes BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is MoreBytes) {
-          return MergeFrom((MoreBytes) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(MoreBytes other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.MoreBytes.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.data_.Count != 0) {
-          result.data_.Add(other.data_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_moreBytesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _moreBytesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              input.ReadBytesArray(tag, field_name, result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public pbc::IPopsicleList<pb::ByteString> DataList {
-        get { return PrepareBuilder().data_; }
-      }
-      public int DataCount {
-        get { return result.DataCount; }
-      }
-      public pb::ByteString GetData(int index) {
-        return result.GetData(index);
-      }
-      public Builder SetData(int index, pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.data_[index] = value;
-        return this;
-      }
-      public Builder AddData(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.data_.Add(value);
-        return this;
-      }
-      public Builder AddRangeData(scg::IEnumerable<pb::ByteString> values) {
-        PrepareBuilder();
-        result.data_.Add(values);
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.data_.Clear();
-        return this;
-      }
-    }
-    static MoreBytes() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class Int32Message : pb::GeneratedMessage<Int32Message, Int32Message.Builder> {
-    private Int32Message() { }
-    private static readonly Int32Message defaultInstance = new Int32Message().MakeReadOnly();
-    private static readonly string[] _int32MessageFieldNames = new string[] { "data" };
-    private static readonly uint[] _int32MessageFieldTags = new uint[] { 8 };
-    public static Int32Message DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override Int32Message DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override Int32Message ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_Int32Message__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<Int32Message, Int32Message.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_Int32Message__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    private bool hasData;
-    private int data_;
-    public bool HasData {
-      get { return hasData; }
-    }
-    public int Data {
-      get { return data_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _int32MessageFieldNames;
-      if (hasData) {
-        output.WriteInt32(1, field_names[0], Data);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasData) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Data);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static Int32Message ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Int32Message ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Int32Message ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Int32Message ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Int32Message ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Int32Message ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static Int32Message ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static Int32Message ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static Int32Message ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Int32Message ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private Int32Message MakeReadOnly() {
-      return this;
-    }
-
-    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(Int32Message prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<Int32Message, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(Int32Message cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private Int32Message result;
-
-      private Int32Message PrepareBuilder() {
-        if (resultIsReadOnly) {
-          Int32Message original = result;
-          result = new Int32Message();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override Int32Message MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Int32Message.Descriptor; }
-      }
-
-      public override Int32Message DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Int32Message.DefaultInstance; }
-      }
-
-      public override Int32Message BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is Int32Message) {
-          return MergeFrom((Int32Message) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(Int32Message other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Int32Message.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasData) {
-          Data = other.Data;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_int32MessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _int32MessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasData = input.ReadInt32(ref result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasData {
-        get { return result.hasData; }
-      }
-      public int Data {
-        get { return result.Data; }
-        set { SetData(value); }
-      }
-      public Builder SetData(int value) {
-        PrepareBuilder();
-        result.hasData = true;
-        result.data_ = value;
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.hasData = false;
-        result.data_ = 0;
-        return this;
-      }
-    }
-    static Int32Message() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class Uint32Message : pb::GeneratedMessage<Uint32Message, Uint32Message.Builder> {
-    private Uint32Message() { }
-    private static readonly Uint32Message defaultInstance = new Uint32Message().MakeReadOnly();
-    private static readonly string[] _uint32MessageFieldNames = new string[] { "data" };
-    private static readonly uint[] _uint32MessageFieldTags = new uint[] { 8 };
-    public static Uint32Message DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override Uint32Message DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override Uint32Message ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_Uint32Message__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<Uint32Message, Uint32Message.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    private bool hasData;
-    private uint data_;
-    public bool HasData {
-      get { return hasData; }
-    }
-    public uint Data {
-      get { return data_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _uint32MessageFieldNames;
-      if (hasData) {
-        output.WriteUInt32(1, field_names[0], Data);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasData) {
-        size += pb::CodedOutputStream.ComputeUInt32Size(1, Data);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static Uint32Message ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Uint32Message ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Uint32Message ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Uint32Message ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Uint32Message ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Uint32Message ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static Uint32Message ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static Uint32Message ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static Uint32Message ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Uint32Message ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private Uint32Message MakeReadOnly() {
-      return this;
-    }
-
-    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(Uint32Message prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<Uint32Message, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(Uint32Message cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private Uint32Message result;
-
-      private Uint32Message PrepareBuilder() {
-        if (resultIsReadOnly) {
-          Uint32Message original = result;
-          result = new Uint32Message();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override Uint32Message MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Uint32Message.Descriptor; }
-      }
-
-      public override Uint32Message DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Uint32Message.DefaultInstance; }
-      }
-
-      public override Uint32Message BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is Uint32Message) {
-          return MergeFrom((Uint32Message) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(Uint32Message other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Uint32Message.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasData) {
-          Data = other.Data;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_uint32MessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _uint32MessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasData = input.ReadUInt32(ref result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasData {
-        get { return result.hasData; }
-      }
-      public uint Data {
-        get { return result.Data; }
-        set { SetData(value); }
-      }
-      public Builder SetData(uint value) {
-        PrepareBuilder();
-        result.hasData = true;
-        result.data_ = value;
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.hasData = false;
-        result.data_ = 0;
-        return this;
-      }
-    }
-    static Uint32Message() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class Int64Message : pb::GeneratedMessage<Int64Message, Int64Message.Builder> {
-    private Int64Message() { }
-    private static readonly Int64Message defaultInstance = new Int64Message().MakeReadOnly();
-    private static readonly string[] _int64MessageFieldNames = new string[] { "data" };
-    private static readonly uint[] _int64MessageFieldTags = new uint[] { 8 };
-    public static Int64Message DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override Int64Message DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override Int64Message ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_Int64Message__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<Int64Message, Int64Message.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_Int64Message__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    private bool hasData;
-    private long data_;
-    public bool HasData {
-      get { return hasData; }
-    }
-    public long Data {
-      get { return data_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _int64MessageFieldNames;
-      if (hasData) {
-        output.WriteInt64(1, field_names[0], Data);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasData) {
-        size += pb::CodedOutputStream.ComputeInt64Size(1, Data);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static Int64Message ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Int64Message ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Int64Message ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Int64Message ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Int64Message ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Int64Message ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static Int64Message ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static Int64Message ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static Int64Message ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Int64Message ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private Int64Message MakeReadOnly() {
-      return this;
-    }
-
-    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(Int64Message prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<Int64Message, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(Int64Message cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private Int64Message result;
-
-      private Int64Message PrepareBuilder() {
-        if (resultIsReadOnly) {
-          Int64Message original = result;
-          result = new Int64Message();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override Int64Message MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Int64Message.Descriptor; }
-      }
-
-      public override Int64Message DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Int64Message.DefaultInstance; }
-      }
-
-      public override Int64Message BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is Int64Message) {
-          return MergeFrom((Int64Message) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(Int64Message other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Int64Message.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasData) {
-          Data = other.Data;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_int64MessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _int64MessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasData = input.ReadInt64(ref result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasData {
-        get { return result.hasData; }
-      }
-      public long Data {
-        get { return result.Data; }
-        set { SetData(value); }
-      }
-      public Builder SetData(long value) {
-        PrepareBuilder();
-        result.hasData = true;
-        result.data_ = value;
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.hasData = false;
-        result.data_ = 0L;
-        return this;
-      }
-    }
-    static Int64Message() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class Uint64Message : pb::GeneratedMessage<Uint64Message, Uint64Message.Builder> {
-    private Uint64Message() { }
-    private static readonly Uint64Message defaultInstance = new Uint64Message().MakeReadOnly();
-    private static readonly string[] _uint64MessageFieldNames = new string[] { "data" };
-    private static readonly uint[] _uint64MessageFieldTags = new uint[] { 8 };
-    public static Uint64Message DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override Uint64Message DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override Uint64Message ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_Uint64Message__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<Uint64Message, Uint64Message.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    private bool hasData;
-    private ulong data_;
-    public bool HasData {
-      get { return hasData; }
-    }
-    public ulong Data {
-      get { return data_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _uint64MessageFieldNames;
-      if (hasData) {
-        output.WriteUInt64(1, field_names[0], Data);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasData) {
-        size += pb::CodedOutputStream.ComputeUInt64Size(1, Data);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static Uint64Message ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Uint64Message ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Uint64Message ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Uint64Message ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Uint64Message ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Uint64Message ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static Uint64Message ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static Uint64Message ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static Uint64Message ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Uint64Message ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private Uint64Message MakeReadOnly() {
-      return this;
-    }
-
-    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(Uint64Message prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<Uint64Message, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(Uint64Message cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private Uint64Message result;
-
-      private Uint64Message PrepareBuilder() {
-        if (resultIsReadOnly) {
-          Uint64Message original = result;
-          result = new Uint64Message();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override Uint64Message MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Uint64Message.Descriptor; }
-      }
-
-      public override Uint64Message DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Uint64Message.DefaultInstance; }
-      }
-
-      public override Uint64Message BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is Uint64Message) {
-          return MergeFrom((Uint64Message) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(Uint64Message other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Uint64Message.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasData) {
-          Data = other.Data;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_uint64MessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _uint64MessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasData = input.ReadUInt64(ref result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasData {
-        get { return result.hasData; }
-      }
-      public ulong Data {
-        get { return result.Data; }
-        set { SetData(value); }
-      }
-      public Builder SetData(ulong value) {
-        PrepareBuilder();
-        result.hasData = true;
-        result.data_ = value;
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.hasData = false;
-        result.data_ = 0UL;
-        return this;
-      }
-    }
-    static Uint64Message() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class BoolMessage : pb::GeneratedMessage<BoolMessage, BoolMessage.Builder> {
-    private BoolMessage() { }
-    private static readonly BoolMessage defaultInstance = new BoolMessage().MakeReadOnly();
-    private static readonly string[] _boolMessageFieldNames = new string[] { "data" };
-    private static readonly uint[] _boolMessageFieldTags = new uint[] { 8 };
-    public static BoolMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override BoolMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override BoolMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_BoolMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<BoolMessage, BoolMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable; }
-    }
-
-    public const int DataFieldNumber = 1;
-    private bool hasData;
-    private bool data_;
-    public bool HasData {
-      get { return hasData; }
-    }
-    public bool Data {
-      get { return data_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _boolMessageFieldNames;
-      if (hasData) {
-        output.WriteBool(1, field_names[0], Data);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasData) {
-        size += pb::CodedOutputStream.ComputeBoolSize(1, Data);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static BoolMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static BoolMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static BoolMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static BoolMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static BoolMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static BoolMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static BoolMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static BoolMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static BoolMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static BoolMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private BoolMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(BoolMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<BoolMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(BoolMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private BoolMessage result;
-
-      private BoolMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          BoolMessage original = result;
-          result = new BoolMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override BoolMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.BoolMessage.Descriptor; }
-      }
-
-      public override BoolMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.BoolMessage.DefaultInstance; }
-      }
-
-      public override BoolMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is BoolMessage) {
-          return MergeFrom((BoolMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(BoolMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.BoolMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasData) {
-          Data = other.Data;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_boolMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _boolMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasData = input.ReadBool(ref result.data_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasData {
-        get { return result.hasData; }
-      }
-      public bool Data {
-        get { return result.Data; }
-        set { SetData(value); }
-      }
-      public Builder SetData(bool value) {
-        PrepareBuilder();
-        result.hasData = true;
-        result.data_ = value;
-        return this;
-      }
-      public Builder ClearData() {
-        PrepareBuilder();
-        result.hasData = false;
-        result.data_ = false;
-        return this;
-      }
-    }
-    static BoolMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestOneof : pb::GeneratedMessage<TestOneof, TestOneof.Builder> {
-    private TestOneof() { }
-    private static readonly TestOneof defaultInstance = new TestOneof().MakeReadOnly();
-    private static readonly string[] _testOneofFieldNames = new string[] { "foo_int", "foo_message", "foo_string", "foogroup" };
-    private static readonly uint[] _testOneofFieldTags = new uint[] { 8, 26, 18, 35 };
-    public static TestOneof DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestOneof DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestOneof ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestOneof, TestOneof.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class FooGroup : pb::GeneratedMessage<FooGroup, FooGroup.Builder> {
-        private FooGroup() { }
-        private static readonly FooGroup defaultInstance = new FooGroup().MakeReadOnly();
-        private static readonly string[] _fooGroupFieldNames = new string[] { "a", "b" };
-        private static readonly uint[] _fooGroupFieldTags = new uint[] { 40, 50 };
-        public static FooGroup DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override FooGroup DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override FooGroup ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof_FooGroup__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<FooGroup, FooGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof_FooGroup__FieldAccessorTable; }
-        }
-
-        public const int AFieldNumber = 5;
-        private bool hasA;
-        private int a_;
-        public bool HasA {
-          get { return hasA; }
-        }
-        public int A {
-          get { return a_; }
-        }
-
-        public const int BFieldNumber = 6;
-        private bool hasB;
-        private string b_ = "";
-        public bool HasB {
-          get { return hasB; }
-        }
-        public string B {
-          get { return b_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _fooGroupFieldNames;
-          if (hasA) {
-            output.WriteInt32(5, field_names[0], A);
-          }
-          if (hasB) {
-            output.WriteString(6, field_names[1], B);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasA) {
-            size += pb::CodedOutputStream.ComputeInt32Size(5, A);
-          }
-          if (hasB) {
-            size += pb::CodedOutputStream.ComputeStringSize(6, B);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static FooGroup ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static FooGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private FooGroup MakeReadOnly() {
-          return this;
-        }
-
-        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(FooGroup prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<FooGroup, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(FooGroup cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private FooGroup result;
-
-          private FooGroup PrepareBuilder() {
-            if (resultIsReadOnly) {
-              FooGroup original = result;
-              result = new FooGroup();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override FooGroup MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.Descriptor; }
-          }
-
-          public override FooGroup DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.DefaultInstance; }
-          }
-
-          public override FooGroup BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is FooGroup) {
-              return MergeFrom((FooGroup) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(FooGroup other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasA) {
-              A = other.A;
-            }
-            if (other.HasB) {
-              B = other.B;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_fooGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _fooGroupFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 40: {
-                  result.hasA = input.ReadInt32(ref result.a_);
-                  break;
-                }
-                case 50: {
-                  result.hasB = input.ReadString(ref result.b_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasA {
-            get { return result.hasA; }
-          }
-          public int A {
-            get { return result.A; }
-            set { SetA(value); }
-          }
-          public Builder SetA(int value) {
-            PrepareBuilder();
-            result.hasA = true;
-            result.a_ = value;
-            return this;
-          }
-          public Builder ClearA() {
-            PrepareBuilder();
-            result.hasA = false;
-            result.a_ = 0;
-            return this;
-          }
-
-          public bool HasB {
-            get { return result.hasB; }
-          }
-          public string B {
-            get { return result.B; }
-            set { SetB(value); }
-          }
-          public Builder SetB(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasB = true;
-            result.b_ = value;
-            return this;
-          }
-          public Builder ClearB() {
-            PrepareBuilder();
-            result.hasB = false;
-            result.b_ = "";
-            return this;
-          }
-        }
-        static FooGroup() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    private object foo_;
-    public enum FooOneofCase {
-      FooInt = 1,
-      FooString = 2,
-      FooMessage = 3,
-      FooGroup = 4,
-      None = 0,
-    }
-    private FooOneofCase fooCase_ = FooOneofCase.None;
-    public FooOneofCase FooCase {
-      get { return fooCase_; }
-    }
-
-    public const int FooIntFieldNumber = 1;
-    public bool HasFooInt {
-      get { return fooCase_ == FooOneofCase.FooInt; }
-    }
-    public int FooInt {
-      get { return fooCase_ == FooOneofCase.FooInt ? (int) foo_ : 0; }
-    }
-
-    public const int FooStringFieldNumber = 2;
-    public bool HasFooString {
-      get { return fooCase_ == FooOneofCase.FooString; }
-    }
-    public string FooString {
-      get { return fooCase_ == FooOneofCase.FooString ? (string) foo_ : ""; }
-    }
-
-    public const int FooMessageFieldNumber = 3;
-    public bool HasFooMessage {
-      get { return fooCase_ == FooOneofCase.FooMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes FooMessage {
-      get { return fooCase_ == FooOneofCase.FooMessage ? (global::Google.ProtocolBuffers.TestProtos.TestAllTypes) foo_ : global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-    }
-
-    public const int FooGroupFieldNumber = 4;
-    public bool HasFooGroup {
-      get { return fooCase_ == FooOneofCase.FooGroup; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup FooGroup {
-      get { return fooCase_ == FooOneofCase.FooGroup ? (global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup) foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testOneofFieldNames;
-      if (fooCase_ == FooOneofCase.FooInt) {
-        output.WriteInt32(1, field_names[0], FooInt);
-      }
-      if (fooCase_ == FooOneofCase.FooString) {
-        output.WriteString(2, field_names[2], FooString);
-      }
-      if (fooCase_ == FooOneofCase.FooMessage) {
-        output.WriteMessage(3, field_names[1], FooMessage);
-      }
-      if (fooCase_ == FooOneofCase.FooGroup) {
-        output.WriteGroup(4, field_names[3], FooGroup);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (fooCase_ == FooOneofCase.FooInt) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, FooInt);
-      }
-      if (fooCase_ == FooOneofCase.FooString) {
-        size += pb::CodedOutputStream.ComputeStringSize(2, FooString);
-      }
-      if (fooCase_ == FooOneofCase.FooMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(3, FooMessage);
-      }
-      if (fooCase_ == FooOneofCase.FooGroup) {
-        size += pb::CodedOutputStream.ComputeGroupSize(4, FooGroup);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestOneof ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOneof ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneof ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOneof ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneof ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOneof ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneof ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestOneof ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestOneof ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOneof ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestOneof MakeReadOnly() {
-      return this;
-    }
-
-    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(TestOneof prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestOneof, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestOneof cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestOneof result;
-
-      private TestOneof PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestOneof original = result;
-          result = new TestOneof();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestOneof MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOneof.Descriptor; }
-      }
-
-      public override TestOneof DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOneof.DefaultInstance; }
-      }
-
-      public override TestOneof BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestOneof) {
-          return MergeFrom((TestOneof) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestOneof other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestOneof.DefaultInstance) return this;
-        PrepareBuilder();
-        switch (other.FooCase) {
-          case FooOneofCase.FooInt: {
-            SetFooInt(other.FooInt);
-            break;
-          }
-          case FooOneofCase.FooString: {
-            SetFooString(other.FooString);
-            break;
-          }
-          case FooOneofCase.FooMessage: {
-            MergeFooMessage(other.FooMessage);
-            break;
-          }
-          case FooOneofCase.FooGroup: {
-            MergeFooGroup(other.FooGroup);
-            break;
-          }
-          case FooOneofCase.None: { break; }
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testOneofFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testOneofFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              int value = 0;
-              if (input.ReadInt32(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooInt;
-              }
-              break;
-            }
-            case 18: {
-              string value = "";
-              if (input.ReadString(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooString;
-              }
-              break;
-            }
-            case 26: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-              if (result.fooCase_ == FooOneofCase.FooMessage) {
-                subBuilder.MergeFrom(FooMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              result.foo_ = subBuilder.BuildPartial();
-              result.fooCase_ = FooOneofCase.FooMessage;
-              break;
-            }
-            case 35: {
-              global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.CreateBuilder();
-              if (result.fooCase_ == FooOneofCase.FooGroup) {
-                subBuilder.MergeFrom(FooGroup);
-              }
-              input.ReadGroup(4, subBuilder, extensionRegistry);
-              result.foo_ = subBuilder.BuildPartial();
-              result.fooCase_ = FooOneofCase.FooGroup;
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasFooInt {
-        get { return result.fooCase_ == FooOneofCase.FooInt; }
-      }
-      public int FooInt {
-        get { return result.fooCase_ == FooOneofCase.FooInt ? (int) result.foo_ : 0; }
-        set { SetFooInt(value); }
-      }
-      public Builder SetFooInt(int value) {
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooInt;
-        return this;
-      }
-      public Builder ClearFooInt() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooInt) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooString {
-        get { return result.fooCase_ == FooOneofCase.FooString; }
-      }
-      public string FooString {
-        get { return result.fooCase_ == FooOneofCase.FooString ? (string) result.foo_ : ""; }
-        set { SetFooString(value); }
-      }
-      public Builder SetFooString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooString;
-        return this;
-      }
-      public Builder ClearFooString() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooString) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooMessage {
-        get { return result.fooCase_ == FooOneofCase.FooMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes FooMessage {
-        get { return result.fooCase_ == FooOneofCase.FooMessage ? (global::Google.ProtocolBuffers.TestProtos.TestAllTypes) result.foo_ : global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-        set { SetFooMessage(value); }
-      }
-      public Builder SetFooMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooMessage;
-        result.foo_ = value;
-        return this;
-      }
-      public Builder SetFooMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooMessage;
-        result.foo_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFooMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooMessage &&
-            result.FooMessage != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-          result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.FooMessage).MergeFrom(value).BuildPartial();
-        } else {
-          result.foo_ = value;
-        }
-        result.fooCase_ = FooOneofCase.FooMessage;
-        return this;
-      }
-      public Builder ClearFooMessage() {
-        if (result.fooCase_ == FooOneofCase.FooMessage) {
-          PrepareBuilder();
-          result.fooCase_ = FooOneofCase.None;
-          result.foo_ = null;
-        }
-        return this;
-      }
-
-      public bool HasFooGroup {
-        get { return result.fooCase_ == FooOneofCase.FooGroup; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup FooGroup {
-        get { return result.fooCase_ == FooOneofCase.FooGroup ? (global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup) result.foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.DefaultInstance; }
-        set { SetFooGroup(value); }
-      }
-      public Builder SetFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooGroup;
-        result.foo_ = value;
-        return this;
-      }
-      public Builder SetFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooGroup;
-        result.foo_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooGroup &&
-            result.FooGroup != global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.DefaultInstance) {
-          result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestOneof.Types.FooGroup.CreateBuilder(result.FooGroup).MergeFrom(value).BuildPartial();
-        } else {
-          result.foo_ = value;
-        }
-        result.fooCase_ = FooOneofCase.FooGroup;
-        return this;
-      }
-      public Builder ClearFooGroup() {
-        if (result.fooCase_ == FooOneofCase.FooGroup) {
-          PrepareBuilder();
-          result.fooCase_ = FooOneofCase.None;
-          result.foo_ = null;
-        }
-        return this;
-      }
-
-      public FooOneofCase FooCase {
-        get { return result.fooCase_; }
-      }
-      public Builder ClearFoo() {
-        PrepareBuilder();
-        result.foo_ = null;
-        result.fooCase_ = FooOneofCase.None;
-        return this;
-      }
-    }
-    static TestOneof() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestOneofBackwardsCompatible : pb::GeneratedMessage<TestOneofBackwardsCompatible, TestOneofBackwardsCompatible.Builder> {
-    private TestOneofBackwardsCompatible() { }
-    private static readonly TestOneofBackwardsCompatible defaultInstance = new TestOneofBackwardsCompatible().MakeReadOnly();
-    private static readonly string[] _testOneofBackwardsCompatibleFieldNames = new string[] { "foo_int", "foo_message", "foo_string", "foogroup" };
-    private static readonly uint[] _testOneofBackwardsCompatibleFieldTags = new uint[] { 8, 26, 18, 35 };
-    public static TestOneofBackwardsCompatible DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestOneofBackwardsCompatible DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestOneofBackwardsCompatible ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneofBackwardsCompatible__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestOneofBackwardsCompatible, TestOneofBackwardsCompatible.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneofBackwardsCompatible__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class FooGroup : pb::GeneratedMessage<FooGroup, FooGroup.Builder> {
-        private FooGroup() { }
-        private static readonly FooGroup defaultInstance = new FooGroup().MakeReadOnly();
-        private static readonly string[] _fooGroupFieldNames = new string[] { "a", "b" };
-        private static readonly uint[] _fooGroupFieldTags = new uint[] { 40, 50 };
-        public static FooGroup DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override FooGroup DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override FooGroup ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneofBackwardsCompatible_FooGroup__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<FooGroup, FooGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneofBackwardsCompatible_FooGroup__FieldAccessorTable; }
-        }
-
-        public const int AFieldNumber = 5;
-        private bool hasA;
-        private int a_;
-        public bool HasA {
-          get { return hasA; }
-        }
-        public int A {
-          get { return a_; }
-        }
-
-        public const int BFieldNumber = 6;
-        private bool hasB;
-        private string b_ = "";
-        public bool HasB {
-          get { return hasB; }
-        }
-        public string B {
-          get { return b_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _fooGroupFieldNames;
-          if (hasA) {
-            output.WriteInt32(5, field_names[0], A);
-          }
-          if (hasB) {
-            output.WriteString(6, field_names[1], B);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasA) {
-            size += pb::CodedOutputStream.ComputeInt32Size(5, A);
-          }
-          if (hasB) {
-            size += pb::CodedOutputStream.ComputeStringSize(6, B);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static FooGroup ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static FooGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private FooGroup MakeReadOnly() {
-          return this;
-        }
-
-        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(FooGroup prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<FooGroup, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(FooGroup cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private FooGroup result;
-
-          private FooGroup PrepareBuilder() {
-            if (resultIsReadOnly) {
-              FooGroup original = result;
-              result = new FooGroup();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override FooGroup MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.Descriptor; }
-          }
-
-          public override FooGroup DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.DefaultInstance; }
-          }
-
-          public override FooGroup BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is FooGroup) {
-              return MergeFrom((FooGroup) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(FooGroup other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasA) {
-              A = other.A;
-            }
-            if (other.HasB) {
-              B = other.B;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_fooGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _fooGroupFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 40: {
-                  result.hasA = input.ReadInt32(ref result.a_);
-                  break;
-                }
-                case 50: {
-                  result.hasB = input.ReadString(ref result.b_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasA {
-            get { return result.hasA; }
-          }
-          public int A {
-            get { return result.A; }
-            set { SetA(value); }
-          }
-          public Builder SetA(int value) {
-            PrepareBuilder();
-            result.hasA = true;
-            result.a_ = value;
-            return this;
-          }
-          public Builder ClearA() {
-            PrepareBuilder();
-            result.hasA = false;
-            result.a_ = 0;
-            return this;
-          }
-
-          public bool HasB {
-            get { return result.hasB; }
-          }
-          public string B {
-            get { return result.B; }
-            set { SetB(value); }
-          }
-          public Builder SetB(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasB = true;
-            result.b_ = value;
-            return this;
-          }
-          public Builder ClearB() {
-            PrepareBuilder();
-            result.hasB = false;
-            result.b_ = "";
-            return this;
-          }
-        }
-        static FooGroup() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int FooIntFieldNumber = 1;
-    private bool hasFooInt;
-    private int fooInt_;
-    public bool HasFooInt {
-      get { return hasFooInt; }
-    }
-    public int FooInt {
-      get { return fooInt_; }
-    }
-
-    public const int FooStringFieldNumber = 2;
-    private bool hasFooString;
-    private string fooString_ = "";
-    public bool HasFooString {
-      get { return hasFooString; }
-    }
-    public string FooString {
-      get { return fooString_; }
-    }
-
-    public const int FooMessageFieldNumber = 3;
-    private bool hasFooMessage;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes fooMessage_;
-    public bool HasFooMessage {
-      get { return hasFooMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes FooMessage {
-      get { return fooMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-    }
-
-    public const int FooGroupFieldNumber = 4;
-    private bool hasFooGroup;
-    private global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup fooGroup_;
-    public bool HasFooGroup {
-      get { return hasFooGroup; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup FooGroup {
-      get { return fooGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testOneofBackwardsCompatibleFieldNames;
-      if (hasFooInt) {
-        output.WriteInt32(1, field_names[0], FooInt);
-      }
-      if (hasFooString) {
-        output.WriteString(2, field_names[2], FooString);
-      }
-      if (hasFooMessage) {
-        output.WriteMessage(3, field_names[1], FooMessage);
-      }
-      if (hasFooGroup) {
-        output.WriteGroup(4, field_names[3], FooGroup);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasFooInt) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, FooInt);
-      }
-      if (hasFooString) {
-        size += pb::CodedOutputStream.ComputeStringSize(2, FooString);
-      }
-      if (hasFooMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(3, FooMessage);
-      }
-      if (hasFooGroup) {
-        size += pb::CodedOutputStream.ComputeGroupSize(4, FooGroup);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestOneofBackwardsCompatible ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOneofBackwardsCompatible ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestOneofBackwardsCompatible MakeReadOnly() {
-      return this;
-    }
-
-    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(TestOneofBackwardsCompatible prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestOneofBackwardsCompatible, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestOneofBackwardsCompatible cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestOneofBackwardsCompatible result;
-
-      private TestOneofBackwardsCompatible PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestOneofBackwardsCompatible original = result;
-          result = new TestOneofBackwardsCompatible();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestOneofBackwardsCompatible MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Descriptor; }
-      }
-
-      public override TestOneofBackwardsCompatible DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.DefaultInstance; }
-      }
-
-      public override TestOneofBackwardsCompatible BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestOneofBackwardsCompatible) {
-          return MergeFrom((TestOneofBackwardsCompatible) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestOneofBackwardsCompatible other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasFooInt) {
-          FooInt = other.FooInt;
-        }
-        if (other.HasFooString) {
-          FooString = other.FooString;
-        }
-        if (other.HasFooMessage) {
-          MergeFooMessage(other.FooMessage);
-        }
-        if (other.HasFooGroup) {
-          MergeFooGroup(other.FooGroup);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testOneofBackwardsCompatibleFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testOneofBackwardsCompatibleFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasFooInt = input.ReadInt32(ref result.fooInt_);
-              break;
-            }
-            case 18: {
-              result.hasFooString = input.ReadString(ref result.fooString_);
-              break;
-            }
-            case 26: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-              if (result.hasFooMessage) {
-                subBuilder.MergeFrom(FooMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              FooMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 35: {
-              global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.CreateBuilder();
-              if (result.hasFooGroup) {
-                subBuilder.MergeFrom(FooGroup);
-              }
-              input.ReadGroup(4, subBuilder, extensionRegistry);
-              FooGroup = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasFooInt {
-        get { return result.hasFooInt; }
-      }
-      public int FooInt {
-        get { return result.FooInt; }
-        set { SetFooInt(value); }
-      }
-      public Builder SetFooInt(int value) {
-        PrepareBuilder();
-        result.hasFooInt = true;
-        result.fooInt_ = value;
-        return this;
-      }
-      public Builder ClearFooInt() {
-        PrepareBuilder();
-        result.hasFooInt = false;
-        result.fooInt_ = 0;
-        return this;
-      }
-
-      public bool HasFooString {
-        get { return result.hasFooString; }
-      }
-      public string FooString {
-        get { return result.FooString; }
-        set { SetFooString(value); }
-      }
-      public Builder SetFooString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasFooString = true;
-        result.fooString_ = value;
-        return this;
-      }
-      public Builder ClearFooString() {
-        PrepareBuilder();
-        result.hasFooString = false;
-        result.fooString_ = "";
-        return this;
-      }
-
-      public bool HasFooMessage {
-       get { return result.hasFooMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes FooMessage {
-        get { return result.FooMessage; }
-        set { SetFooMessage(value); }
-      }
-      public Builder SetFooMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasFooMessage = true;
-        result.fooMessage_ = value;
-        return this;
-      }
-      public Builder SetFooMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasFooMessage = true;
-        result.fooMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFooMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasFooMessage &&
-            result.fooMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-            result.fooMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.fooMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.fooMessage_ = value;
-        }
-        result.hasFooMessage = true;
-        return this;
-      }
-      public Builder ClearFooMessage() {
-        PrepareBuilder();
-        result.hasFooMessage = false;
-        result.fooMessage_ = null;
-        return this;
-      }
-
-      public bool HasFooGroup {
-       get { return result.hasFooGroup; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup FooGroup {
-        get { return result.FooGroup; }
-        set { SetFooGroup(value); }
-      }
-      public Builder SetFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasFooGroup = true;
-        result.fooGroup_ = value;
-        return this;
-      }
-      public Builder SetFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasFooGroup = true;
-        result.fooGroup_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasFooGroup &&
-            result.fooGroup_ != global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.DefaultInstance) {
-            result.fooGroup_ = global::Google.ProtocolBuffers.TestProtos.TestOneofBackwardsCompatible.Types.FooGroup.CreateBuilder(result.fooGroup_).MergeFrom(value).BuildPartial();
-        } else {
-          result.fooGroup_ = value;
-        }
-        result.hasFooGroup = true;
-        return this;
-      }
-      public Builder ClearFooGroup() {
-        PrepareBuilder();
-        result.hasFooGroup = false;
-        result.fooGroup_ = null;
-        return this;
-      }
-    }
-    static TestOneofBackwardsCompatible() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestOneof2 : pb::GeneratedMessage<TestOneof2, TestOneof2.Builder> {
-    private TestOneof2() { }
-    private static readonly TestOneof2 defaultInstance = new TestOneof2().MakeReadOnly();
-    private static readonly string[] _testOneof2FieldNames = new string[] { "bar_bytes", "bar_cord", "bar_enum", "bar_int", "bar_string", "bar_string_piece", "baz_int", "baz_string", "foo_bytes", "foo_cord", "foo_enum", "foo_int", "foo_lazy_message", "foo_message", "foo_string", "foo_string_piece", "foogroup" };
-    private static readonly uint[] _testOneof2FieldTags = new uint[] { 130, 114, 136, 96, 106, 122, 144, 154, 42, 26, 48, 8, 90, 58, 18, 34, 67 };
-    public static TestOneof2 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestOneof2 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestOneof2 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof2__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestOneof2, TestOneof2.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof2__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum NestedEnum {
-        FOO = 1,
-        BAR = 2,
-        BAZ = 3,
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class FooGroup : pb::GeneratedMessage<FooGroup, FooGroup.Builder> {
-        private FooGroup() { }
-        private static readonly FooGroup defaultInstance = new FooGroup().MakeReadOnly();
-        private static readonly string[] _fooGroupFieldNames = new string[] { "a", "b" };
-        private static readonly uint[] _fooGroupFieldTags = new uint[] { 72, 82 };
-        public static FooGroup DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override FooGroup DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override FooGroup ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof2_FooGroup__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<FooGroup, FooGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof2_FooGroup__FieldAccessorTable; }
-        }
-
-        public const int AFieldNumber = 9;
-        private bool hasA;
-        private int a_;
-        public bool HasA {
-          get { return hasA; }
-        }
-        public int A {
-          get { return a_; }
-        }
-
-        public const int BFieldNumber = 10;
-        private bool hasB;
-        private string b_ = "";
-        public bool HasB {
-          get { return hasB; }
-        }
-        public string B {
-          get { return b_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _fooGroupFieldNames;
-          if (hasA) {
-            output.WriteInt32(9, field_names[0], A);
-          }
-          if (hasB) {
-            output.WriteString(10, field_names[1], B);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasA) {
-            size += pb::CodedOutputStream.ComputeInt32Size(9, A);
-          }
-          if (hasB) {
-            size += pb::CodedOutputStream.ComputeStringSize(10, B);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static FooGroup ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static FooGroup ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static FooGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static FooGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private FooGroup MakeReadOnly() {
-          return this;
-        }
-
-        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(FooGroup prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<FooGroup, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(FooGroup cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private FooGroup result;
-
-          private FooGroup PrepareBuilder() {
-            if (resultIsReadOnly) {
-              FooGroup original = result;
-              result = new FooGroup();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override FooGroup MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.Descriptor; }
-          }
-
-          public override FooGroup DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.DefaultInstance; }
-          }
-
-          public override FooGroup BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is FooGroup) {
-              return MergeFrom((FooGroup) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(FooGroup other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasA) {
-              A = other.A;
-            }
-            if (other.HasB) {
-              B = other.B;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_fooGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _fooGroupFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 72: {
-                  result.hasA = input.ReadInt32(ref result.a_);
-                  break;
-                }
-                case 82: {
-                  result.hasB = input.ReadString(ref result.b_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasA {
-            get { return result.hasA; }
-          }
-          public int A {
-            get { return result.A; }
-            set { SetA(value); }
-          }
-          public Builder SetA(int value) {
-            PrepareBuilder();
-            result.hasA = true;
-            result.a_ = value;
-            return this;
-          }
-          public Builder ClearA() {
-            PrepareBuilder();
-            result.hasA = false;
-            result.a_ = 0;
-            return this;
-          }
-
-          public bool HasB {
-            get { return result.hasB; }
-          }
-          public string B {
-            get { return result.B; }
-            set { SetB(value); }
-          }
-          public Builder SetB(string value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasB = true;
-            result.b_ = value;
-            return this;
-          }
-          public Builder ClearB() {
-            PrepareBuilder();
-            result.hasB = false;
-            result.b_ = "";
-            return this;
-          }
-        }
-        static FooGroup() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {
-        private NestedMessage() { }
-        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();
-        private static readonly string[] _nestedMessageFieldNames = new string[] { "corge_int", "qux_int" };
-        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 16, 8 };
-        public static NestedMessage DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override NestedMessage DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override NestedMessage ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof2_NestedMessage__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestOneof2_NestedMessage__FieldAccessorTable; }
-        }
-
-        public const int QuxIntFieldNumber = 1;
-        private bool hasQuxInt;
-        private long quxInt_;
-        public bool HasQuxInt {
-          get { return hasQuxInt; }
-        }
-        public long QuxInt {
-          get { return quxInt_; }
-        }
-
-        public const int CorgeIntFieldNumber = 2;
-        private pbc::PopsicleList<int> corgeInt_ = new pbc::PopsicleList<int>();
-        public scg::IList<int> CorgeIntList {
-          get { return pbc::Lists.AsReadOnly(corgeInt_); }
-        }
-        public int CorgeIntCount {
-          get { return corgeInt_.Count; }
-        }
-        public int GetCorgeInt(int index) {
-          return corgeInt_[index];
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _nestedMessageFieldNames;
-          if (hasQuxInt) {
-            output.WriteInt64(1, field_names[1], QuxInt);
-          }
-          if (corgeInt_.Count > 0) {
-            output.WriteInt32Array(2, field_names[0], corgeInt_);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasQuxInt) {
-            size += pb::CodedOutputStream.ComputeInt64Size(1, QuxInt);
-          }
-          {
-            int dataSize = 0;
-            foreach (int element in CorgeIntList) {
-              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-            }
-            size += dataSize;
-            size += 1 * corgeInt_.Count;
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private NestedMessage MakeReadOnly() {
-          corgeInt_.MakeReadOnly();
-          return this;
-        }
-
-        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(NestedMessage prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(NestedMessage cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private NestedMessage result;
-
-          private NestedMessage PrepareBuilder() {
-            if (resultIsReadOnly) {
-              NestedMessage original = result;
-              result = new NestedMessage();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override NestedMessage MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.Descriptor; }
-          }
-
-          public override NestedMessage DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.DefaultInstance; }
-          }
-
-          public override NestedMessage BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is NestedMessage) {
-              return MergeFrom((NestedMessage) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(NestedMessage other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasQuxInt) {
-              QuxInt = other.QuxInt;
-            }
-            if (other.corgeInt_.Count != 0) {
-              result.corgeInt_.Add(other.corgeInt_);
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _nestedMessageFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 8: {
-                  result.hasQuxInt = input.ReadInt64(ref result.quxInt_);
-                  break;
-                }
-                case 18:
-                case 16: {
-                  input.ReadInt32Array(tag, field_name, result.corgeInt_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasQuxInt {
-            get { return result.hasQuxInt; }
-          }
-          public long QuxInt {
-            get { return result.QuxInt; }
-            set { SetQuxInt(value); }
-          }
-          public Builder SetQuxInt(long value) {
-            PrepareBuilder();
-            result.hasQuxInt = true;
-            result.quxInt_ = value;
-            return this;
-          }
-          public Builder ClearQuxInt() {
-            PrepareBuilder();
-            result.hasQuxInt = false;
-            result.quxInt_ = 0L;
-            return this;
-          }
-
-          public pbc::IPopsicleList<int> CorgeIntList {
-            get { return PrepareBuilder().corgeInt_; }
-          }
-          public int CorgeIntCount {
-            get { return result.CorgeIntCount; }
-          }
-          public int GetCorgeInt(int index) {
-            return result.GetCorgeInt(index);
-          }
-          public Builder SetCorgeInt(int index, int value) {
-            PrepareBuilder();
-            result.corgeInt_[index] = value;
-            return this;
-          }
-          public Builder AddCorgeInt(int value) {
-            PrepareBuilder();
-            result.corgeInt_.Add(value);
-            return this;
-          }
-          public Builder AddRangeCorgeInt(scg::IEnumerable<int> values) {
-            PrepareBuilder();
-            result.corgeInt_.Add(values);
-            return this;
-          }
-          public Builder ClearCorgeInt() {
-            PrepareBuilder();
-            result.corgeInt_.Clear();
-            return this;
-          }
-        }
-        static NestedMessage() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    private object foo_;
-    public enum FooOneofCase {
-      FooInt = 1,
-      FooString = 2,
-      FooCord = 3,
-      FooStringPiece = 4,
-      FooBytes = 5,
-      FooEnum = 6,
-      FooMessage = 7,
-      FooGroup = 8,
-      FooLazyMessage = 11,
-      None = 0,
-    }
-    private FooOneofCase fooCase_ = FooOneofCase.None;
-    public FooOneofCase FooCase {
-      get { return fooCase_; }
-    }
-
-    private object bar_;
-    public enum BarOneofCase {
-      BarInt = 12,
-      BarString = 13,
-      BarCord = 14,
-      BarStringPiece = 15,
-      BarBytes = 16,
-      BarEnum = 17,
-      None = 0,
-    }
-    private BarOneofCase barCase_ = BarOneofCase.None;
-    public BarOneofCase BarCase {
-      get { return barCase_; }
-    }
-
-    public const int FooIntFieldNumber = 1;
-    public bool HasFooInt {
-      get { return fooCase_ == FooOneofCase.FooInt; }
-    }
-    public int FooInt {
-      get { return fooCase_ == FooOneofCase.FooInt ? (int) foo_ : 0; }
-    }
-
-    public const int FooStringFieldNumber = 2;
-    public bool HasFooString {
-      get { return fooCase_ == FooOneofCase.FooString; }
-    }
-    public string FooString {
-      get { return fooCase_ == FooOneofCase.FooString ? (string) foo_ : ""; }
-    }
-
-    public const int FooCordFieldNumber = 3;
-    public bool HasFooCord {
-      get { return fooCase_ == FooOneofCase.FooCord; }
-    }
-    public string FooCord {
-      get { return fooCase_ == FooOneofCase.FooCord ? (string) foo_ : ""; }
-    }
-
-    public const int FooStringPieceFieldNumber = 4;
-    public bool HasFooStringPiece {
-      get { return fooCase_ == FooOneofCase.FooStringPiece; }
-    }
-    public string FooStringPiece {
-      get { return fooCase_ == FooOneofCase.FooStringPiece ? (string) foo_ : ""; }
-    }
-
-    public const int FooBytesFieldNumber = 5;
-    public bool HasFooBytes {
-      get { return fooCase_ == FooOneofCase.FooBytes; }
-    }
-    public pb::ByteString FooBytes {
-      get { return fooCase_ == FooOneofCase.FooBytes ? (pb::ByteString) foo_ : pb::ByteString.Empty; }
-    }
-
-    public const int FooEnumFieldNumber = 6;
-    public bool HasFooEnum {
-      get { return fooCase_ == FooOneofCase.FooEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum FooEnum {
-      get { return fooCase_ == FooOneofCase.FooEnum ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum) foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum.FOO; }
-    }
-
-    public const int FooMessageFieldNumber = 7;
-    public bool HasFooMessage {
-      get { return fooCase_ == FooOneofCase.FooMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage FooMessage {
-      get { return fooCase_ == FooOneofCase.FooMessage ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage) foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public const int FooGroupFieldNumber = 8;
-    public bool HasFooGroup {
-      get { return fooCase_ == FooOneofCase.FooGroup; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup FooGroup {
-      get { return fooCase_ == FooOneofCase.FooGroup ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup) foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.DefaultInstance; }
-    }
-
-    public const int FooLazyMessageFieldNumber = 11;
-    public bool HasFooLazyMessage {
-      get { return fooCase_ == FooOneofCase.FooLazyMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage FooLazyMessage {
-      get { return fooCase_ == FooOneofCase.FooLazyMessage ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage) foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public const int BarIntFieldNumber = 12;
-    public bool HasBarInt {
-      get { return barCase_ == BarOneofCase.BarInt; }
-    }
-    public int BarInt {
-      get { return barCase_ == BarOneofCase.BarInt ? (int) bar_ : 5; }
-    }
-
-    public const int BarStringFieldNumber = 13;
-    public bool HasBarString {
-      get { return barCase_ == BarOneofCase.BarString; }
-    }
-    public string BarString {
-      get { return barCase_ == BarOneofCase.BarString ? (string) bar_ : "STRING"; }
-    }
-
-    public const int BarCordFieldNumber = 14;
-    public bool HasBarCord {
-      get { return barCase_ == BarOneofCase.BarCord; }
-    }
-    public string BarCord {
-      get { return barCase_ == BarOneofCase.BarCord ? (string) bar_ : "CORD"; }
-    }
-
-    public const int BarStringPieceFieldNumber = 15;
-    public bool HasBarStringPiece {
-      get { return barCase_ == BarOneofCase.BarStringPiece; }
-    }
-    public string BarStringPiece {
-      get { return barCase_ == BarOneofCase.BarStringPiece ? (string) bar_ : "SPIECE"; }
-    }
-
-    public const int BarBytesFieldNumber = 16;
-    public bool HasBarBytes {
-      get { return barCase_ == BarOneofCase.BarBytes; }
-    }
-    public pb::ByteString BarBytes {
-      get { return barCase_ == BarOneofCase.BarBytes ? (pb::ByteString) bar_ : (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestOneof2.Descriptor.Fields[13].DefaultValue; }
-    }
-
-    public const int BarEnumFieldNumber = 17;
-    public bool HasBarEnum {
-      get { return barCase_ == BarOneofCase.BarEnum; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum BarEnum {
-      get { return barCase_ == BarOneofCase.BarEnum ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum) bar_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum.BAR; }
-    }
-
-    public const int BazIntFieldNumber = 18;
-    private bool hasBazInt;
-    private int bazInt_;
-    public bool HasBazInt {
-      get { return hasBazInt; }
-    }
-    public int BazInt {
-      get { return bazInt_; }
-    }
-
-    public const int BazStringFieldNumber = 19;
-    private bool hasBazString;
-    private string bazString_ = "BAZ";
-    public bool HasBazString {
-      get { return hasBazString; }
-    }
-    public string BazString {
-      get { return bazString_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testOneof2FieldNames;
-      if (fooCase_ == FooOneofCase.FooInt) {
-        output.WriteInt32(1, field_names[11], FooInt);
-      }
-      if (fooCase_ == FooOneofCase.FooString) {
-        output.WriteString(2, field_names[14], FooString);
-      }
-      if (fooCase_ == FooOneofCase.FooCord) {
-        output.WriteString(3, field_names[9], FooCord);
-      }
-      if (fooCase_ == FooOneofCase.FooStringPiece) {
-        output.WriteString(4, field_names[15], FooStringPiece);
-      }
-      if (fooCase_ == FooOneofCase.FooBytes) {
-        output.WriteBytes(5, field_names[8], FooBytes);
-      }
-      if (fooCase_ == FooOneofCase.FooEnum) {
-        output.WriteEnum(6, field_names[10], (int) FooEnum, FooEnum);
-      }
-      if (fooCase_ == FooOneofCase.FooMessage) {
-        output.WriteMessage(7, field_names[13], FooMessage);
-      }
-      if (fooCase_ == FooOneofCase.FooGroup) {
-        output.WriteGroup(8, field_names[16], FooGroup);
-      }
-      if (fooCase_ == FooOneofCase.FooLazyMessage) {
-        output.WriteMessage(11, field_names[12], FooLazyMessage);
-      }
-      if (barCase_ == BarOneofCase.BarInt) {
-        output.WriteInt32(12, field_names[3], BarInt);
-      }
-      if (barCase_ == BarOneofCase.BarString) {
-        output.WriteString(13, field_names[4], BarString);
-      }
-      if (barCase_ == BarOneofCase.BarCord) {
-        output.WriteString(14, field_names[1], BarCord);
-      }
-      if (barCase_ == BarOneofCase.BarStringPiece) {
-        output.WriteString(15, field_names[5], BarStringPiece);
-      }
-      if (barCase_ == BarOneofCase.BarBytes) {
-        output.WriteBytes(16, field_names[0], BarBytes);
-      }
-      if (barCase_ == BarOneofCase.BarEnum) {
-        output.WriteEnum(17, field_names[2], (int) BarEnum, BarEnum);
-      }
-      if (hasBazInt) {
-        output.WriteInt32(18, field_names[6], BazInt);
-      }
-      if (hasBazString) {
-        output.WriteString(19, field_names[7], BazString);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (fooCase_ == FooOneofCase.FooInt) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, FooInt);
-      }
-      if (fooCase_ == FooOneofCase.FooString) {
-        size += pb::CodedOutputStream.ComputeStringSize(2, FooString);
-      }
-      if (fooCase_ == FooOneofCase.FooCord) {
-        size += pb::CodedOutputStream.ComputeStringSize(3, FooCord);
-      }
-      if (fooCase_ == FooOneofCase.FooStringPiece) {
-        size += pb::CodedOutputStream.ComputeStringSize(4, FooStringPiece);
-      }
-      if (fooCase_ == FooOneofCase.FooBytes) {
-        size += pb::CodedOutputStream.ComputeBytesSize(5, FooBytes);
-      }
-      if (fooCase_ == FooOneofCase.FooEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(6, (int) FooEnum);
-      }
-      if (fooCase_ == FooOneofCase.FooMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(7, FooMessage);
-      }
-      if (fooCase_ == FooOneofCase.FooGroup) {
-        size += pb::CodedOutputStream.ComputeGroupSize(8, FooGroup);
-      }
-      if (fooCase_ == FooOneofCase.FooLazyMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(11, FooLazyMessage);
-      }
-      if (barCase_ == BarOneofCase.BarInt) {
-        size += pb::CodedOutputStream.ComputeInt32Size(12, BarInt);
-      }
-      if (barCase_ == BarOneofCase.BarString) {
-        size += pb::CodedOutputStream.ComputeStringSize(13, BarString);
-      }
-      if (barCase_ == BarOneofCase.BarCord) {
-        size += pb::CodedOutputStream.ComputeStringSize(14, BarCord);
-      }
-      if (barCase_ == BarOneofCase.BarStringPiece) {
-        size += pb::CodedOutputStream.ComputeStringSize(15, BarStringPiece);
-      }
-      if (barCase_ == BarOneofCase.BarBytes) {
-        size += pb::CodedOutputStream.ComputeBytesSize(16, BarBytes);
-      }
-      if (barCase_ == BarOneofCase.BarEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(17, (int) BarEnum);
-      }
-      if (hasBazInt) {
-        size += pb::CodedOutputStream.ComputeInt32Size(18, BazInt);
-      }
-      if (hasBazString) {
-        size += pb::CodedOutputStream.ComputeStringSize(19, BazString);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestOneof2 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOneof2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneof2 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOneof2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneof2 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOneof2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestOneof2 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestOneof2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestOneof2 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOneof2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestOneof2 MakeReadOnly() {
-      return this;
-    }
-
-    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(TestOneof2 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestOneof2, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestOneof2 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestOneof2 result;
-
-      private TestOneof2 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestOneof2 original = result;
-          result = new TestOneof2();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestOneof2 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOneof2.Descriptor; }
-      }
-
-      public override TestOneof2 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOneof2.DefaultInstance; }
-      }
-
-      public override TestOneof2 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestOneof2) {
-          return MergeFrom((TestOneof2) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestOneof2 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestOneof2.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasBazInt) {
-          BazInt = other.BazInt;
-        }
-        if (other.HasBazString) {
-          BazString = other.BazString;
-        }
-        switch (other.FooCase) {
-          case FooOneofCase.FooInt: {
-            SetFooInt(other.FooInt);
-            break;
-          }
-          case FooOneofCase.FooString: {
-            SetFooString(other.FooString);
-            break;
-          }
-          case FooOneofCase.FooCord: {
-            SetFooCord(other.FooCord);
-            break;
-          }
-          case FooOneofCase.FooStringPiece: {
-            SetFooStringPiece(other.FooStringPiece);
-            break;
-          }
-          case FooOneofCase.FooBytes: {
-            SetFooBytes(other.FooBytes);
-            break;
-          }
-          case FooOneofCase.FooEnum: {
-            SetFooEnum(other.FooEnum);
-            break;
-          }
-          case FooOneofCase.FooMessage: {
-            MergeFooMessage(other.FooMessage);
-            break;
-          }
-          case FooOneofCase.FooGroup: {
-            MergeFooGroup(other.FooGroup);
-            break;
-          }
-          case FooOneofCase.FooLazyMessage: {
-            MergeFooLazyMessage(other.FooLazyMessage);
-            break;
-          }
-          case FooOneofCase.None: { break; }
-        }
-        switch (other.BarCase) {
-          case BarOneofCase.BarInt: {
-            SetBarInt(other.BarInt);
-            break;
-          }
-          case BarOneofCase.BarString: {
-            SetBarString(other.BarString);
-            break;
-          }
-          case BarOneofCase.BarCord: {
-            SetBarCord(other.BarCord);
-            break;
-          }
-          case BarOneofCase.BarStringPiece: {
-            SetBarStringPiece(other.BarStringPiece);
-            break;
-          }
-          case BarOneofCase.BarBytes: {
-            SetBarBytes(other.BarBytes);
-            break;
-          }
-          case BarOneofCase.BarEnum: {
-            SetBarEnum(other.BarEnum);
-            break;
-          }
-          case BarOneofCase.None: { break; }
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testOneof2FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testOneof2FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              int value = 0;
-              if (input.ReadInt32(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooInt;
-              }
-              break;
-            }
-            case 18: {
-              string value = "";
-              if (input.ReadString(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooString;
-              }
-              break;
-            }
-            case 26: {
-              string value = "";
-              if (input.ReadString(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooCord;
-              }
-              break;
-            }
-            case 34: {
-              string value = "";
-              if (input.ReadString(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooStringPiece;
-              }
-              break;
-            }
-            case 42: {
-              pb::ByteString value = pb::ByteString.Empty;
-              if (input.ReadBytes(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooBytes;
-              }
-              break;
-            }
-            case 48: {
-              object unknown;
-              global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum enumValue = global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum.FOO;
-              if(input.ReadEnum(ref enumValue, out unknown)) {
-                result.foo_ = enumValue;
-                result.fooCase_ = FooOneofCase.FooEnum;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(6, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 58: {
-              global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.CreateBuilder();
-              if (result.fooCase_ == FooOneofCase.FooMessage) {
-                subBuilder.MergeFrom(FooMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              result.foo_ = subBuilder.BuildPartial();
-              result.fooCase_ = FooOneofCase.FooMessage;
-              break;
-            }
-            case 67: {
-              global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.CreateBuilder();
-              if (result.fooCase_ == FooOneofCase.FooGroup) {
-                subBuilder.MergeFrom(FooGroup);
-              }
-              input.ReadGroup(8, subBuilder, extensionRegistry);
-              result.foo_ = subBuilder.BuildPartial();
-              result.fooCase_ = FooOneofCase.FooGroup;
-              break;
-            }
-            case 90: {
-              global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.CreateBuilder();
-              if (result.fooCase_ == FooOneofCase.FooLazyMessage) {
-                subBuilder.MergeFrom(FooLazyMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              result.foo_ = subBuilder.BuildPartial();
-              result.fooCase_ = FooOneofCase.FooLazyMessage;
-              break;
-            }
-            case 96: {
-              int value = 5;
-              if (input.ReadInt32(ref value)) {
-                result.bar_ = value;
-                result.barCase_ = BarOneofCase.BarInt;
-              }
-              break;
-            }
-            case 106: {
-              string value = "STRING";
-              if (input.ReadString(ref value)) {
-                result.bar_ = value;
-                result.barCase_ = BarOneofCase.BarString;
-              }
-              break;
-            }
-            case 114: {
-              string value = "CORD";
-              if (input.ReadString(ref value)) {
-                result.bar_ = value;
-                result.barCase_ = BarOneofCase.BarCord;
-              }
-              break;
-            }
-            case 122: {
-              string value = "SPIECE";
-              if (input.ReadString(ref value)) {
-                result.bar_ = value;
-                result.barCase_ = BarOneofCase.BarStringPiece;
-              }
-              break;
-            }
-            case 130: {
-              pb::ByteString value = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestOneof2.Descriptor.Fields[13].DefaultValue;
-              if (input.ReadBytes(ref value)) {
-                result.bar_ = value;
-                result.barCase_ = BarOneofCase.BarBytes;
-              }
-              break;
-            }
-            case 136: {
-              object unknown;
-              global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum enumValue = global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum.BAR;
-              if(input.ReadEnum(ref enumValue, out unknown)) {
-                result.bar_ = enumValue;
-                result.barCase_ = BarOneofCase.BarEnum;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(17, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 144: {
-              result.hasBazInt = input.ReadInt32(ref result.bazInt_);
-              break;
-            }
-            case 154: {
-              result.hasBazString = input.ReadString(ref result.bazString_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasFooInt {
-        get { return result.fooCase_ == FooOneofCase.FooInt; }
-      }
-      public int FooInt {
-        get { return result.fooCase_ == FooOneofCase.FooInt ? (int) result.foo_ : 0; }
-        set { SetFooInt(value); }
-      }
-      public Builder SetFooInt(int value) {
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooInt;
-        return this;
-      }
-      public Builder ClearFooInt() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooInt) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooString {
-        get { return result.fooCase_ == FooOneofCase.FooString; }
-      }
-      public string FooString {
-        get { return result.fooCase_ == FooOneofCase.FooString ? (string) result.foo_ : ""; }
-        set { SetFooString(value); }
-      }
-      public Builder SetFooString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooString;
-        return this;
-      }
-      public Builder ClearFooString() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooString) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooCord {
-        get { return result.fooCase_ == FooOneofCase.FooCord; }
-      }
-      public string FooCord {
-        get { return result.fooCase_ == FooOneofCase.FooCord ? (string) result.foo_ : ""; }
-        set { SetFooCord(value); }
-      }
-      public Builder SetFooCord(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooCord;
-        return this;
-      }
-      public Builder ClearFooCord() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooCord) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooStringPiece {
-        get { return result.fooCase_ == FooOneofCase.FooStringPiece; }
-      }
-      public string FooStringPiece {
-        get { return result.fooCase_ == FooOneofCase.FooStringPiece ? (string) result.foo_ : ""; }
-        set { SetFooStringPiece(value); }
-      }
-      public Builder SetFooStringPiece(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooStringPiece;
-        return this;
-      }
-      public Builder ClearFooStringPiece() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooStringPiece) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooBytes {
-        get { return result.fooCase_ == FooOneofCase.FooBytes; }
-      }
-      public pb::ByteString FooBytes {
-        get { return result.fooCase_ == FooOneofCase.FooBytes ? (pb::ByteString) result.foo_ : pb::ByteString.Empty; }
-        set { SetFooBytes(value); }
-      }
-      public Builder SetFooBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooBytes;
-        return this;
-      }
-      public Builder ClearFooBytes() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooBytes) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooEnum {
-        get { return result.fooCase_ == FooOneofCase.FooEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum FooEnum {
-        get { return result.fooCase_ == FooOneofCase.FooEnum ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum) result.foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum.FOO; }
-        set { SetFooEnum(value); }
-      }
-      public Builder SetFooEnum(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooEnum;
-        return this;
-      }
-      public Builder ClearFooEnum() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooEnum) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooMessage {
-        get { return result.fooCase_ == FooOneofCase.FooMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage FooMessage {
-        get { return result.fooCase_ == FooOneofCase.FooMessage ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage) result.foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.DefaultInstance; }
-        set { SetFooMessage(value); }
-      }
-      public Builder SetFooMessage(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooMessage;
-        result.foo_ = value;
-        return this;
-      }
-      public Builder SetFooMessage(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooMessage;
-        result.foo_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFooMessage(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooMessage &&
-            result.FooMessage != global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.DefaultInstance) {
-          result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.CreateBuilder(result.FooMessage).MergeFrom(value).BuildPartial();
-        } else {
-          result.foo_ = value;
-        }
-        result.fooCase_ = FooOneofCase.FooMessage;
-        return this;
-      }
-      public Builder ClearFooMessage() {
-        if (result.fooCase_ == FooOneofCase.FooMessage) {
-          PrepareBuilder();
-          result.fooCase_ = FooOneofCase.None;
-          result.foo_ = null;
-        }
-        return this;
-      }
-
-      public bool HasFooGroup {
-        get { return result.fooCase_ == FooOneofCase.FooGroup; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup FooGroup {
-        get { return result.fooCase_ == FooOneofCase.FooGroup ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup) result.foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.DefaultInstance; }
-        set { SetFooGroup(value); }
-      }
-      public Builder SetFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooGroup;
-        result.foo_ = value;
-        return this;
-      }
-      public Builder SetFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooGroup;
-        result.foo_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFooGroup(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooGroup &&
-            result.FooGroup != global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.DefaultInstance) {
-          result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.FooGroup.CreateBuilder(result.FooGroup).MergeFrom(value).BuildPartial();
-        } else {
-          result.foo_ = value;
-        }
-        result.fooCase_ = FooOneofCase.FooGroup;
-        return this;
-      }
-      public Builder ClearFooGroup() {
-        if (result.fooCase_ == FooOneofCase.FooGroup) {
-          PrepareBuilder();
-          result.fooCase_ = FooOneofCase.None;
-          result.foo_ = null;
-        }
-        return this;
-      }
-
-      public bool HasFooLazyMessage {
-        get { return result.fooCase_ == FooOneofCase.FooLazyMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage FooLazyMessage {
-        get { return result.fooCase_ == FooOneofCase.FooLazyMessage ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage) result.foo_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.DefaultInstance; }
-        set { SetFooLazyMessage(value); }
-      }
-      public Builder SetFooLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooLazyMessage;
-        result.foo_ = value;
-        return this;
-      }
-      public Builder SetFooLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooLazyMessage;
-        result.foo_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFooLazyMessage(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooLazyMessage &&
-            result.FooLazyMessage != global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.DefaultInstance) {
-          result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedMessage.CreateBuilder(result.FooLazyMessage).MergeFrom(value).BuildPartial();
-        } else {
-          result.foo_ = value;
-        }
-        result.fooCase_ = FooOneofCase.FooLazyMessage;
-        return this;
-      }
-      public Builder ClearFooLazyMessage() {
-        if (result.fooCase_ == FooOneofCase.FooLazyMessage) {
-          PrepareBuilder();
-          result.fooCase_ = FooOneofCase.None;
-          result.foo_ = null;
-        }
-        return this;
-      }
-
-      public bool HasBarInt {
-        get { return result.barCase_ == BarOneofCase.BarInt; }
-      }
-      public int BarInt {
-        get { return result.barCase_ == BarOneofCase.BarInt ? (int) result.bar_ : 5; }
-        set { SetBarInt(value); }
-      }
-      public Builder SetBarInt(int value) {
-        PrepareBuilder();
-        result.bar_ = value;
-        result.barCase_ = BarOneofCase.BarInt;
-        return this;
-      }
-      public Builder ClearBarInt() {
-        PrepareBuilder();
-        if (result.barCase_ == BarOneofCase.BarInt) {
-          result.barCase_ = BarOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasBarString {
-        get { return result.barCase_ == BarOneofCase.BarString; }
-      }
-      public string BarString {
-        get { return result.barCase_ == BarOneofCase.BarString ? (string) result.bar_ : "STRING"; }
-        set { SetBarString(value); }
-      }
-      public Builder SetBarString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.bar_ = value;
-        result.barCase_ = BarOneofCase.BarString;
-        return this;
-      }
-      public Builder ClearBarString() {
-        PrepareBuilder();
-        if (result.barCase_ == BarOneofCase.BarString) {
-          result.barCase_ = BarOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasBarCord {
-        get { return result.barCase_ == BarOneofCase.BarCord; }
-      }
-      public string BarCord {
-        get { return result.barCase_ == BarOneofCase.BarCord ? (string) result.bar_ : "CORD"; }
-        set { SetBarCord(value); }
-      }
-      public Builder SetBarCord(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.bar_ = value;
-        result.barCase_ = BarOneofCase.BarCord;
-        return this;
-      }
-      public Builder ClearBarCord() {
-        PrepareBuilder();
-        if (result.barCase_ == BarOneofCase.BarCord) {
-          result.barCase_ = BarOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasBarStringPiece {
-        get { return result.barCase_ == BarOneofCase.BarStringPiece; }
-      }
-      public string BarStringPiece {
-        get { return result.barCase_ == BarOneofCase.BarStringPiece ? (string) result.bar_ : "SPIECE"; }
-        set { SetBarStringPiece(value); }
-      }
-      public Builder SetBarStringPiece(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.bar_ = value;
-        result.barCase_ = BarOneofCase.BarStringPiece;
-        return this;
-      }
-      public Builder ClearBarStringPiece() {
-        PrepareBuilder();
-        if (result.barCase_ == BarOneofCase.BarStringPiece) {
-          result.barCase_ = BarOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasBarBytes {
-        get { return result.barCase_ == BarOneofCase.BarBytes; }
-      }
-      public pb::ByteString BarBytes {
-        get { return result.barCase_ == BarOneofCase.BarBytes ? (pb::ByteString) result.bar_ : (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestOneof2.Descriptor.Fields[13].DefaultValue; }
-        set { SetBarBytes(value); }
-      }
-      public Builder SetBarBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.bar_ = value;
-        result.barCase_ = BarOneofCase.BarBytes;
-        return this;
-      }
-      public Builder ClearBarBytes() {
-        PrepareBuilder();
-        if (result.barCase_ == BarOneofCase.BarBytes) {
-          result.barCase_ = BarOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasBarEnum {
-        get { return result.barCase_ == BarOneofCase.BarEnum; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum BarEnum {
-        get { return result.barCase_ == BarOneofCase.BarEnum ? (global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum) result.bar_ : global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum.BAR; }
-        set { SetBarEnum(value); }
-      }
-      public Builder SetBarEnum(global::Google.ProtocolBuffers.TestProtos.TestOneof2.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.bar_ = value;
-        result.barCase_ = BarOneofCase.BarEnum;
-        return this;
-      }
-      public Builder ClearBarEnum() {
-        PrepareBuilder();
-        if (result.barCase_ == BarOneofCase.BarEnum) {
-          result.barCase_ = BarOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasBazInt {
-        get { return result.hasBazInt; }
-      }
-      public int BazInt {
-        get { return result.BazInt; }
-        set { SetBazInt(value); }
-      }
-      public Builder SetBazInt(int value) {
-        PrepareBuilder();
-        result.hasBazInt = true;
-        result.bazInt_ = value;
-        return this;
-      }
-      public Builder ClearBazInt() {
-        PrepareBuilder();
-        result.hasBazInt = false;
-        result.bazInt_ = 0;
-        return this;
-      }
-
-      public bool HasBazString {
-        get { return result.hasBazString; }
-      }
-      public string BazString {
-        get { return result.BazString; }
-        set { SetBazString(value); }
-      }
-      public Builder SetBazString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasBazString = true;
-        result.bazString_ = value;
-        return this;
-      }
-      public Builder ClearBazString() {
-        PrepareBuilder();
-        result.hasBazString = false;
-        result.bazString_ = "BAZ";
-        return this;
-      }
-
-      public FooOneofCase FooCase {
-        get { return result.fooCase_; }
-      }
-      public Builder ClearFoo() {
-        PrepareBuilder();
-        result.foo_ = null;
-        result.fooCase_ = FooOneofCase.None;
-        return this;
-      }
-
-      public BarOneofCase BarCase {
-        get { return result.barCase_; }
-      }
-      public Builder ClearBar() {
-        PrepareBuilder();
-        result.bar_ = null;
-        result.barCase_ = BarOneofCase.None;
-        return this;
-      }
-    }
-    static TestOneof2() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestRequiredOneof : pb::GeneratedMessage<TestRequiredOneof, TestRequiredOneof.Builder> {
-    private TestRequiredOneof() { }
-    private static readonly TestRequiredOneof defaultInstance = new TestRequiredOneof().MakeReadOnly();
-    private static readonly string[] _testRequiredOneofFieldNames = new string[] { "foo_int", "foo_message", "foo_string" };
-    private static readonly uint[] _testRequiredOneofFieldTags = new uint[] { 8, 26, 18 };
-    public static TestRequiredOneof DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestRequiredOneof DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestRequiredOneof ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRequiredOneof__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestRequiredOneof, TestRequiredOneof.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRequiredOneof__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {
-        private NestedMessage() { }
-        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();
-        private static readonly string[] _nestedMessageFieldNames = new string[] { "required_double" };
-        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 9 };
-        public static NestedMessage DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override NestedMessage DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override NestedMessage ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRequiredOneof_NestedMessage__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRequiredOneof_NestedMessage__FieldAccessorTable; }
-        }
-
-        public const int RequiredDoubleFieldNumber = 1;
-        private bool hasRequiredDouble;
-        private double requiredDouble_;
-        public bool HasRequiredDouble {
-          get { return hasRequiredDouble; }
-        }
-        public double RequiredDouble {
-          get { return requiredDouble_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            if (!hasRequiredDouble) return false;
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _nestedMessageFieldNames;
-          if (hasRequiredDouble) {
-            output.WriteDouble(1, field_names[0], RequiredDouble);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasRequiredDouble) {
-            size += pb::CodedOutputStream.ComputeDoubleSize(1, RequiredDouble);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private NestedMessage MakeReadOnly() {
-          return this;
-        }
-
-        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(NestedMessage prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(NestedMessage cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private NestedMessage result;
-
-          private NestedMessage PrepareBuilder() {
-            if (resultIsReadOnly) {
-              NestedMessage original = result;
-              result = new NestedMessage();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override NestedMessage MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.Descriptor; }
-          }
-
-          public override NestedMessage DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.DefaultInstance; }
-          }
-
-          public override NestedMessage BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is NestedMessage) {
-              return MergeFrom((NestedMessage) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(NestedMessage other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasRequiredDouble) {
-              RequiredDouble = other.RequiredDouble;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _nestedMessageFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 9: {
-                  result.hasRequiredDouble = input.ReadDouble(ref result.requiredDouble_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasRequiredDouble {
-            get { return result.hasRequiredDouble; }
-          }
-          public double RequiredDouble {
-            get { return result.RequiredDouble; }
-            set { SetRequiredDouble(value); }
-          }
-          public Builder SetRequiredDouble(double value) {
-            PrepareBuilder();
-            result.hasRequiredDouble = true;
-            result.requiredDouble_ = value;
-            return this;
-          }
-          public Builder ClearRequiredDouble() {
-            PrepareBuilder();
-            result.hasRequiredDouble = false;
-            result.requiredDouble_ = 0D;
-            return this;
-          }
-        }
-        static NestedMessage() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    private object foo_;
-    public enum FooOneofCase {
-      FooInt = 1,
-      FooString = 2,
-      FooMessage = 3,
-      None = 0,
-    }
-    private FooOneofCase fooCase_ = FooOneofCase.None;
-    public FooOneofCase FooCase {
-      get { return fooCase_; }
-    }
-
-    public const int FooIntFieldNumber = 1;
-    public bool HasFooInt {
-      get { return fooCase_ == FooOneofCase.FooInt; }
-    }
-    public int FooInt {
-      get { return fooCase_ == FooOneofCase.FooInt ? (int) foo_ : 0; }
-    }
-
-    public const int FooStringFieldNumber = 2;
-    public bool HasFooString {
-      get { return fooCase_ == FooOneofCase.FooString; }
-    }
-    public string FooString {
-      get { return fooCase_ == FooOneofCase.FooString ? (string) foo_ : ""; }
-    }
-
-    public const int FooMessageFieldNumber = 3;
-    public bool HasFooMessage {
-      get { return fooCase_ == FooOneofCase.FooMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage FooMessage {
-      get { return fooCase_ == FooOneofCase.FooMessage ? (global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage) foo_ : global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (HasFooMessage) {
-          if (!FooMessage.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testRequiredOneofFieldNames;
-      if (fooCase_ == FooOneofCase.FooInt) {
-        output.WriteInt32(1, field_names[0], FooInt);
-      }
-      if (fooCase_ == FooOneofCase.FooString) {
-        output.WriteString(2, field_names[2], FooString);
-      }
-      if (fooCase_ == FooOneofCase.FooMessage) {
-        output.WriteMessage(3, field_names[1], FooMessage);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (fooCase_ == FooOneofCase.FooInt) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, FooInt);
-      }
-      if (fooCase_ == FooOneofCase.FooString) {
-        size += pb::CodedOutputStream.ComputeStringSize(2, FooString);
-      }
-      if (fooCase_ == FooOneofCase.FooMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(3, FooMessage);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestRequiredOneof ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRequiredOneof ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredOneof ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRequiredOneof ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredOneof ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRequiredOneof ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredOneof ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestRequiredOneof ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestRequiredOneof ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRequiredOneof ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestRequiredOneof MakeReadOnly() {
-      return this;
-    }
-
-    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(TestRequiredOneof prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestRequiredOneof, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestRequiredOneof cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestRequiredOneof result;
-
-      private TestRequiredOneof PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestRequiredOneof original = result;
-          result = new TestRequiredOneof();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestRequiredOneof MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Descriptor; }
-      }
-
-      public override TestRequiredOneof DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.DefaultInstance; }
-      }
-
-      public override TestRequiredOneof BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestRequiredOneof) {
-          return MergeFrom((TestRequiredOneof) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestRequiredOneof other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.DefaultInstance) return this;
-        PrepareBuilder();
-        switch (other.FooCase) {
-          case FooOneofCase.FooInt: {
-            SetFooInt(other.FooInt);
-            break;
-          }
-          case FooOneofCase.FooString: {
-            SetFooString(other.FooString);
-            break;
-          }
-          case FooOneofCase.FooMessage: {
-            MergeFooMessage(other.FooMessage);
-            break;
-          }
-          case FooOneofCase.None: { break; }
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testRequiredOneofFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testRequiredOneofFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              int value = 0;
-              if (input.ReadInt32(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooInt;
-              }
-              break;
-            }
-            case 18: {
-              string value = "";
-              if (input.ReadString(ref value)) {
-                result.foo_ = value;
-                result.fooCase_ = FooOneofCase.FooString;
-              }
-              break;
-            }
-            case 26: {
-              global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.CreateBuilder();
-              if (result.fooCase_ == FooOneofCase.FooMessage) {
-                subBuilder.MergeFrom(FooMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              result.foo_ = subBuilder.BuildPartial();
-              result.fooCase_ = FooOneofCase.FooMessage;
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasFooInt {
-        get { return result.fooCase_ == FooOneofCase.FooInt; }
-      }
-      public int FooInt {
-        get { return result.fooCase_ == FooOneofCase.FooInt ? (int) result.foo_ : 0; }
-        set { SetFooInt(value); }
-      }
-      public Builder SetFooInt(int value) {
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooInt;
-        return this;
-      }
-      public Builder ClearFooInt() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooInt) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooString {
-        get { return result.fooCase_ == FooOneofCase.FooString; }
-      }
-      public string FooString {
-        get { return result.fooCase_ == FooOneofCase.FooString ? (string) result.foo_ : ""; }
-        set { SetFooString(value); }
-      }
-      public Builder SetFooString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.FooString;
-        return this;
-      }
-      public Builder ClearFooString() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooString) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasFooMessage {
-        get { return result.fooCase_ == FooOneofCase.FooMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage FooMessage {
-        get { return result.fooCase_ == FooOneofCase.FooMessage ? (global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage) result.foo_ : global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.DefaultInstance; }
-        set { SetFooMessage(value); }
-      }
-      public Builder SetFooMessage(global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooMessage;
-        result.foo_ = value;
-        return this;
-      }
-      public Builder SetFooMessage(global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.fooCase_ = FooOneofCase.FooMessage;
-        result.foo_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFooMessage(global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.FooMessage &&
-            result.FooMessage != global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.DefaultInstance) {
-          result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestRequiredOneof.Types.NestedMessage.CreateBuilder(result.FooMessage).MergeFrom(value).BuildPartial();
-        } else {
-          result.foo_ = value;
-        }
-        result.fooCase_ = FooOneofCase.FooMessage;
-        return this;
-      }
-      public Builder ClearFooMessage() {
-        if (result.fooCase_ == FooOneofCase.FooMessage) {
-          PrepareBuilder();
-          result.fooCase_ = FooOneofCase.None;
-          result.foo_ = null;
-        }
-        return this;
-      }
-
-      public FooOneofCase FooCase {
-        get { return result.fooCase_; }
-      }
-      public Builder ClearFoo() {
-        PrepareBuilder();
-        result.foo_ = null;
-        result.fooCase_ = FooOneofCase.None;
-        return this;
-      }
-    }
-    static TestRequiredOneof() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestPackedTypes : pb::GeneratedMessage<TestPackedTypes, TestPackedTypes.Builder> {
-    private TestPackedTypes() { }
-    private static readonly TestPackedTypes defaultInstance = new TestPackedTypes().MakeReadOnly();
-    private static readonly string[] _testPackedTypesFieldNames = new string[] { "packed_bool", "packed_double", "packed_enum", "packed_fixed32", "packed_fixed64", "packed_float", "packed_int32", "packed_int64", "packed_sfixed32", "packed_sfixed64", "packed_sint32", "packed_sint64", "packed_uint32", "packed_uint64" };
-    private static readonly uint[] _testPackedTypesFieldTags = new uint[] { 818, 810, 826, 770, 778, 802, 722, 730, 786, 794, 754, 762, 738, 746 };
-    public static TestPackedTypes DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestPackedTypes DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestPackedTypes ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestPackedTypes__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestPackedTypes, TestPackedTypes.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable; }
-    }
-
-    public const int PackedInt32FieldNumber = 90;
-    private int packedInt32MemoizedSerializedSize;
-    private pbc::PopsicleList<int> packedInt32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> PackedInt32List {
-      get { return pbc::Lists.AsReadOnly(packedInt32_); }
-    }
-    public int PackedInt32Count {
-      get { return packedInt32_.Count; }
-    }
-    public int GetPackedInt32(int index) {
-      return packedInt32_[index];
-    }
-
-    public const int PackedInt64FieldNumber = 91;
-    private int packedInt64MemoizedSerializedSize;
-    private pbc::PopsicleList<long> packedInt64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> PackedInt64List {
-      get { return pbc::Lists.AsReadOnly(packedInt64_); }
-    }
-    public int PackedInt64Count {
-      get { return packedInt64_.Count; }
-    }
-    public long GetPackedInt64(int index) {
-      return packedInt64_[index];
-    }
-
-    public const int PackedUint32FieldNumber = 92;
-    private int packedUint32MemoizedSerializedSize;
-    private pbc::PopsicleList<uint> packedUint32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> PackedUint32List {
-      get { return pbc::Lists.AsReadOnly(packedUint32_); }
-    }
-    public int PackedUint32Count {
-      get { return packedUint32_.Count; }
-    }
-    public uint GetPackedUint32(int index) {
-      return packedUint32_[index];
-    }
-
-    public const int PackedUint64FieldNumber = 93;
-    private int packedUint64MemoizedSerializedSize;
-    private pbc::PopsicleList<ulong> packedUint64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> PackedUint64List {
-      get { return pbc::Lists.AsReadOnly(packedUint64_); }
-    }
-    public int PackedUint64Count {
-      get { return packedUint64_.Count; }
-    }
-    public ulong GetPackedUint64(int index) {
-      return packedUint64_[index];
-    }
-
-    public const int PackedSint32FieldNumber = 94;
-    private int packedSint32MemoizedSerializedSize;
-    private pbc::PopsicleList<int> packedSint32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> PackedSint32List {
-      get { return pbc::Lists.AsReadOnly(packedSint32_); }
-    }
-    public int PackedSint32Count {
-      get { return packedSint32_.Count; }
-    }
-    public int GetPackedSint32(int index) {
-      return packedSint32_[index];
-    }
-
-    public const int PackedSint64FieldNumber = 95;
-    private int packedSint64MemoizedSerializedSize;
-    private pbc::PopsicleList<long> packedSint64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> PackedSint64List {
-      get { return pbc::Lists.AsReadOnly(packedSint64_); }
-    }
-    public int PackedSint64Count {
-      get { return packedSint64_.Count; }
-    }
-    public long GetPackedSint64(int index) {
-      return packedSint64_[index];
-    }
-
-    public const int PackedFixed32FieldNumber = 96;
-    private int packedFixed32MemoizedSerializedSize;
-    private pbc::PopsicleList<uint> packedFixed32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> PackedFixed32List {
-      get { return pbc::Lists.AsReadOnly(packedFixed32_); }
-    }
-    public int PackedFixed32Count {
-      get { return packedFixed32_.Count; }
-    }
-    public uint GetPackedFixed32(int index) {
-      return packedFixed32_[index];
-    }
-
-    public const int PackedFixed64FieldNumber = 97;
-    private int packedFixed64MemoizedSerializedSize;
-    private pbc::PopsicleList<ulong> packedFixed64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> PackedFixed64List {
-      get { return pbc::Lists.AsReadOnly(packedFixed64_); }
-    }
-    public int PackedFixed64Count {
-      get { return packedFixed64_.Count; }
-    }
-    public ulong GetPackedFixed64(int index) {
-      return packedFixed64_[index];
-    }
-
-    public const int PackedSfixed32FieldNumber = 98;
-    private int packedSfixed32MemoizedSerializedSize;
-    private pbc::PopsicleList<int> packedSfixed32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> PackedSfixed32List {
-      get { return pbc::Lists.AsReadOnly(packedSfixed32_); }
-    }
-    public int PackedSfixed32Count {
-      get { return packedSfixed32_.Count; }
-    }
-    public int GetPackedSfixed32(int index) {
-      return packedSfixed32_[index];
-    }
-
-    public const int PackedSfixed64FieldNumber = 99;
-    private int packedSfixed64MemoizedSerializedSize;
-    private pbc::PopsicleList<long> packedSfixed64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> PackedSfixed64List {
-      get { return pbc::Lists.AsReadOnly(packedSfixed64_); }
-    }
-    public int PackedSfixed64Count {
-      get { return packedSfixed64_.Count; }
-    }
-    public long GetPackedSfixed64(int index) {
-      return packedSfixed64_[index];
-    }
-
-    public const int PackedFloatFieldNumber = 100;
-    private int packedFloatMemoizedSerializedSize;
-    private pbc::PopsicleList<float> packedFloat_ = new pbc::PopsicleList<float>();
-    public scg::IList<float> PackedFloatList {
-      get { return pbc::Lists.AsReadOnly(packedFloat_); }
-    }
-    public int PackedFloatCount {
-      get { return packedFloat_.Count; }
-    }
-    public float GetPackedFloat(int index) {
-      return packedFloat_[index];
-    }
-
-    public const int PackedDoubleFieldNumber = 101;
-    private int packedDoubleMemoizedSerializedSize;
-    private pbc::PopsicleList<double> packedDouble_ = new pbc::PopsicleList<double>();
-    public scg::IList<double> PackedDoubleList {
-      get { return pbc::Lists.AsReadOnly(packedDouble_); }
-    }
-    public int PackedDoubleCount {
-      get { return packedDouble_.Count; }
-    }
-    public double GetPackedDouble(int index) {
-      return packedDouble_[index];
-    }
-
-    public const int PackedBoolFieldNumber = 102;
-    private int packedBoolMemoizedSerializedSize;
-    private pbc::PopsicleList<bool> packedBool_ = new pbc::PopsicleList<bool>();
-    public scg::IList<bool> PackedBoolList {
-      get { return pbc::Lists.AsReadOnly(packedBool_); }
-    }
-    public int PackedBoolCount {
-      get { return packedBool_.Count; }
-    }
-    public bool GetPackedBool(int index) {
-      return packedBool_[index];
-    }
-
-    public const int PackedEnumFieldNumber = 103;
-    private int packedEnumMemoizedSerializedSize;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> packedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> PackedEnumList {
-      get { return pbc::Lists.AsReadOnly(packedEnum_); }
-    }
-    public int PackedEnumCount {
-      get { return packedEnum_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetPackedEnum(int index) {
-      return packedEnum_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testPackedTypesFieldNames;
-      if (packedInt32_.Count > 0) {
-        output.WritePackedInt32Array(90, field_names[6], packedInt32MemoizedSerializedSize, packedInt32_);
-      }
-      if (packedInt64_.Count > 0) {
-        output.WritePackedInt64Array(91, field_names[7], packedInt64MemoizedSerializedSize, packedInt64_);
-      }
-      if (packedUint32_.Count > 0) {
-        output.WritePackedUInt32Array(92, field_names[12], packedUint32MemoizedSerializedSize, packedUint32_);
-      }
-      if (packedUint64_.Count > 0) {
-        output.WritePackedUInt64Array(93, field_names[13], packedUint64MemoizedSerializedSize, packedUint64_);
-      }
-      if (packedSint32_.Count > 0) {
-        output.WritePackedSInt32Array(94, field_names[10], packedSint32MemoizedSerializedSize, packedSint32_);
-      }
-      if (packedSint64_.Count > 0) {
-        output.WritePackedSInt64Array(95, field_names[11], packedSint64MemoizedSerializedSize, packedSint64_);
-      }
-      if (packedFixed32_.Count > 0) {
-        output.WritePackedFixed32Array(96, field_names[3], packedFixed32MemoizedSerializedSize, packedFixed32_);
-      }
-      if (packedFixed64_.Count > 0) {
-        output.WritePackedFixed64Array(97, field_names[4], packedFixed64MemoizedSerializedSize, packedFixed64_);
-      }
-      if (packedSfixed32_.Count > 0) {
-        output.WritePackedSFixed32Array(98, field_names[8], packedSfixed32MemoizedSerializedSize, packedSfixed32_);
-      }
-      if (packedSfixed64_.Count > 0) {
-        output.WritePackedSFixed64Array(99, field_names[9], packedSfixed64MemoizedSerializedSize, packedSfixed64_);
-      }
-      if (packedFloat_.Count > 0) {
-        output.WritePackedFloatArray(100, field_names[5], packedFloatMemoizedSerializedSize, packedFloat_);
-      }
-      if (packedDouble_.Count > 0) {
-        output.WritePackedDoubleArray(101, field_names[1], packedDoubleMemoizedSerializedSize, packedDouble_);
-      }
-      if (packedBool_.Count > 0) {
-        output.WritePackedBoolArray(102, field_names[0], packedBoolMemoizedSerializedSize, packedBool_);
-      }
-      if (packedEnum_.Count > 0) {
-        output.WritePackedEnumArray(103, field_names[2], packedEnumMemoizedSerializedSize, packedEnum_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      {
-        int dataSize = 0;
-        foreach (int element in PackedInt32List) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        if (packedInt32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedInt32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in PackedInt64List) {
-          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        if (packedInt64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedInt64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (uint element in PackedUint32List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        if (packedUint32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedUint32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (ulong element in PackedUint64List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        if (packedUint64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedUint64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in PackedSint32List) {
-          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        if (packedSint32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedSint32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in PackedSint64List) {
-          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        if (packedSint64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedSint64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * packedFixed32_.Count;
-        size += dataSize;
-        if (packedFixed32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedFixed32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * packedFixed64_.Count;
-        size += dataSize;
-        if (packedFixed64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedFixed64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * packedSfixed32_.Count;
-        size += dataSize;
-        if (packedSfixed32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedSfixed32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * packedSfixed64_.Count;
-        size += dataSize;
-        if (packedSfixed64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedSfixed64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * packedFloat_.Count;
-        size += dataSize;
-        if (packedFloat_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedFloatMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * packedDouble_.Count;
-        size += dataSize;
-        if (packedDouble_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedDoubleMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 1 * packedBool_.Count;
-        size += dataSize;
-        if (packedBool_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedBoolMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        if (packedEnum_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in packedEnum_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 2;
-          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
-        }
-        packedEnumMemoizedSerializedSize = dataSize;
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestPackedTypes ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestPackedTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestPackedTypes ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestPackedTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestPackedTypes ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestPackedTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestPackedTypes ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestPackedTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestPackedTypes ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestPackedTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestPackedTypes MakeReadOnly() {
-      packedInt32_.MakeReadOnly();
-      packedInt64_.MakeReadOnly();
-      packedUint32_.MakeReadOnly();
-      packedUint64_.MakeReadOnly();
-      packedSint32_.MakeReadOnly();
-      packedSint64_.MakeReadOnly();
-      packedFixed32_.MakeReadOnly();
-      packedFixed64_.MakeReadOnly();
-      packedSfixed32_.MakeReadOnly();
-      packedSfixed64_.MakeReadOnly();
-      packedFloat_.MakeReadOnly();
-      packedDouble_.MakeReadOnly();
-      packedBool_.MakeReadOnly();
-      packedEnum_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestPackedTypes prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestPackedTypes, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestPackedTypes cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestPackedTypes result;
-
-      private TestPackedTypes PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestPackedTypes original = result;
-          result = new TestPackedTypes();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestPackedTypes MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Descriptor; }
-      }
-
-      public override TestPackedTypes DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.DefaultInstance; }
-      }
-
-      public override TestPackedTypes BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestPackedTypes) {
-          return MergeFrom((TestPackedTypes) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestPackedTypes other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.packedInt32_.Count != 0) {
-          result.packedInt32_.Add(other.packedInt32_);
-        }
-        if (other.packedInt64_.Count != 0) {
-          result.packedInt64_.Add(other.packedInt64_);
-        }
-        if (other.packedUint32_.Count != 0) {
-          result.packedUint32_.Add(other.packedUint32_);
-        }
-        if (other.packedUint64_.Count != 0) {
-          result.packedUint64_.Add(other.packedUint64_);
-        }
-        if (other.packedSint32_.Count != 0) {
-          result.packedSint32_.Add(other.packedSint32_);
-        }
-        if (other.packedSint64_.Count != 0) {
-          result.packedSint64_.Add(other.packedSint64_);
-        }
-        if (other.packedFixed32_.Count != 0) {
-          result.packedFixed32_.Add(other.packedFixed32_);
-        }
-        if (other.packedFixed64_.Count != 0) {
-          result.packedFixed64_.Add(other.packedFixed64_);
-        }
-        if (other.packedSfixed32_.Count != 0) {
-          result.packedSfixed32_.Add(other.packedSfixed32_);
-        }
-        if (other.packedSfixed64_.Count != 0) {
-          result.packedSfixed64_.Add(other.packedSfixed64_);
-        }
-        if (other.packedFloat_.Count != 0) {
-          result.packedFloat_.Add(other.packedFloat_);
-        }
-        if (other.packedDouble_.Count != 0) {
-          result.packedDouble_.Add(other.packedDouble_);
-        }
-        if (other.packedBool_.Count != 0) {
-          result.packedBool_.Add(other.packedBool_);
-        }
-        if (other.packedEnum_.Count != 0) {
-          result.packedEnum_.Add(other.packedEnum_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testPackedTypesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testPackedTypesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 722:
-            case 720: {
-              input.ReadInt32Array(tag, field_name, result.packedInt32_);
-              break;
-            }
-            case 730:
-            case 728: {
-              input.ReadInt64Array(tag, field_name, result.packedInt64_);
-              break;
-            }
-            case 738:
-            case 736: {
-              input.ReadUInt32Array(tag, field_name, result.packedUint32_);
-              break;
-            }
-            case 746:
-            case 744: {
-              input.ReadUInt64Array(tag, field_name, result.packedUint64_);
-              break;
-            }
-            case 754:
-            case 752: {
-              input.ReadSInt32Array(tag, field_name, result.packedSint32_);
-              break;
-            }
-            case 762:
-            case 760: {
-              input.ReadSInt64Array(tag, field_name, result.packedSint64_);
-              break;
-            }
-            case 770:
-            case 773: {
-              input.ReadFixed32Array(tag, field_name, result.packedFixed32_);
-              break;
-            }
-            case 778:
-            case 777: {
-              input.ReadFixed64Array(tag, field_name, result.packedFixed64_);
-              break;
-            }
-            case 786:
-            case 789: {
-              input.ReadSFixed32Array(tag, field_name, result.packedSfixed32_);
-              break;
-            }
-            case 794:
-            case 793: {
-              input.ReadSFixed64Array(tag, field_name, result.packedSfixed64_);
-              break;
-            }
-            case 802:
-            case 805: {
-              input.ReadFloatArray(tag, field_name, result.packedFloat_);
-              break;
-            }
-            case 810:
-            case 809: {
-              input.ReadDoubleArray(tag, field_name, result.packedDouble_);
-              break;
-            }
-            case 818:
-            case 816: {
-              input.ReadBoolArray(tag, field_name, result.packedBool_);
-              break;
-            }
-            case 826:
-            case 824: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.packedEnum_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(103, (ulong)(int)rawValue);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public pbc::IPopsicleList<int> PackedInt32List {
-        get { return PrepareBuilder().packedInt32_; }
-      }
-      public int PackedInt32Count {
-        get { return result.PackedInt32Count; }
-      }
-      public int GetPackedInt32(int index) {
-        return result.GetPackedInt32(index);
-      }
-      public Builder SetPackedInt32(int index, int value) {
-        PrepareBuilder();
-        result.packedInt32_[index] = value;
-        return this;
-      }
-      public Builder AddPackedInt32(int value) {
-        PrepareBuilder();
-        result.packedInt32_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedInt32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.packedInt32_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedInt32() {
-        PrepareBuilder();
-        result.packedInt32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> PackedInt64List {
-        get { return PrepareBuilder().packedInt64_; }
-      }
-      public int PackedInt64Count {
-        get { return result.PackedInt64Count; }
-      }
-      public long GetPackedInt64(int index) {
-        return result.GetPackedInt64(index);
-      }
-      public Builder SetPackedInt64(int index, long value) {
-        PrepareBuilder();
-        result.packedInt64_[index] = value;
-        return this;
-      }
-      public Builder AddPackedInt64(long value) {
-        PrepareBuilder();
-        result.packedInt64_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedInt64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.packedInt64_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedInt64() {
-        PrepareBuilder();
-        result.packedInt64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<uint> PackedUint32List {
-        get { return PrepareBuilder().packedUint32_; }
-      }
-      public int PackedUint32Count {
-        get { return result.PackedUint32Count; }
-      }
-      public uint GetPackedUint32(int index) {
-        return result.GetPackedUint32(index);
-      }
-      public Builder SetPackedUint32(int index, uint value) {
-        PrepareBuilder();
-        result.packedUint32_[index] = value;
-        return this;
-      }
-      public Builder AddPackedUint32(uint value) {
-        PrepareBuilder();
-        result.packedUint32_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedUint32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.packedUint32_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedUint32() {
-        PrepareBuilder();
-        result.packedUint32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> PackedUint64List {
-        get { return PrepareBuilder().packedUint64_; }
-      }
-      public int PackedUint64Count {
-        get { return result.PackedUint64Count; }
-      }
-      public ulong GetPackedUint64(int index) {
-        return result.GetPackedUint64(index);
-      }
-      public Builder SetPackedUint64(int index, ulong value) {
-        PrepareBuilder();
-        result.packedUint64_[index] = value;
-        return this;
-      }
-      public Builder AddPackedUint64(ulong value) {
-        PrepareBuilder();
-        result.packedUint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedUint64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.packedUint64_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedUint64() {
-        PrepareBuilder();
-        result.packedUint64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> PackedSint32List {
-        get { return PrepareBuilder().packedSint32_; }
-      }
-      public int PackedSint32Count {
-        get { return result.PackedSint32Count; }
-      }
-      public int GetPackedSint32(int index) {
-        return result.GetPackedSint32(index);
-      }
-      public Builder SetPackedSint32(int index, int value) {
-        PrepareBuilder();
-        result.packedSint32_[index] = value;
-        return this;
-      }
-      public Builder AddPackedSint32(int value) {
-        PrepareBuilder();
-        result.packedSint32_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedSint32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.packedSint32_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedSint32() {
-        PrepareBuilder();
-        result.packedSint32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> PackedSint64List {
-        get { return PrepareBuilder().packedSint64_; }
-      }
-      public int PackedSint64Count {
-        get { return result.PackedSint64Count; }
-      }
-      public long GetPackedSint64(int index) {
-        return result.GetPackedSint64(index);
-      }
-      public Builder SetPackedSint64(int index, long value) {
-        PrepareBuilder();
-        result.packedSint64_[index] = value;
-        return this;
-      }
-      public Builder AddPackedSint64(long value) {
-        PrepareBuilder();
-        result.packedSint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedSint64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.packedSint64_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedSint64() {
-        PrepareBuilder();
-        result.packedSint64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<uint> PackedFixed32List {
-        get { return PrepareBuilder().packedFixed32_; }
-      }
-      public int PackedFixed32Count {
-        get { return result.PackedFixed32Count; }
-      }
-      public uint GetPackedFixed32(int index) {
-        return result.GetPackedFixed32(index);
-      }
-      public Builder SetPackedFixed32(int index, uint value) {
-        PrepareBuilder();
-        result.packedFixed32_[index] = value;
-        return this;
-      }
-      public Builder AddPackedFixed32(uint value) {
-        PrepareBuilder();
-        result.packedFixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedFixed32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.packedFixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedFixed32() {
-        PrepareBuilder();
-        result.packedFixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> PackedFixed64List {
-        get { return PrepareBuilder().packedFixed64_; }
-      }
-      public int PackedFixed64Count {
-        get { return result.PackedFixed64Count; }
-      }
-      public ulong GetPackedFixed64(int index) {
-        return result.GetPackedFixed64(index);
-      }
-      public Builder SetPackedFixed64(int index, ulong value) {
-        PrepareBuilder();
-        result.packedFixed64_[index] = value;
-        return this;
-      }
-      public Builder AddPackedFixed64(ulong value) {
-        PrepareBuilder();
-        result.packedFixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedFixed64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.packedFixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedFixed64() {
-        PrepareBuilder();
-        result.packedFixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> PackedSfixed32List {
-        get { return PrepareBuilder().packedSfixed32_; }
-      }
-      public int PackedSfixed32Count {
-        get { return result.PackedSfixed32Count; }
-      }
-      public int GetPackedSfixed32(int index) {
-        return result.GetPackedSfixed32(index);
-      }
-      public Builder SetPackedSfixed32(int index, int value) {
-        PrepareBuilder();
-        result.packedSfixed32_[index] = value;
-        return this;
-      }
-      public Builder AddPackedSfixed32(int value) {
-        PrepareBuilder();
-        result.packedSfixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedSfixed32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.packedSfixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedSfixed32() {
-        PrepareBuilder();
-        result.packedSfixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> PackedSfixed64List {
-        get { return PrepareBuilder().packedSfixed64_; }
-      }
-      public int PackedSfixed64Count {
-        get { return result.PackedSfixed64Count; }
-      }
-      public long GetPackedSfixed64(int index) {
-        return result.GetPackedSfixed64(index);
-      }
-      public Builder SetPackedSfixed64(int index, long value) {
-        PrepareBuilder();
-        result.packedSfixed64_[index] = value;
-        return this;
-      }
-      public Builder AddPackedSfixed64(long value) {
-        PrepareBuilder();
-        result.packedSfixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedSfixed64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.packedSfixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedSfixed64() {
-        PrepareBuilder();
-        result.packedSfixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<float> PackedFloatList {
-        get { return PrepareBuilder().packedFloat_; }
-      }
-      public int PackedFloatCount {
-        get { return result.PackedFloatCount; }
-      }
-      public float GetPackedFloat(int index) {
-        return result.GetPackedFloat(index);
-      }
-      public Builder SetPackedFloat(int index, float value) {
-        PrepareBuilder();
-        result.packedFloat_[index] = value;
-        return this;
-      }
-      public Builder AddPackedFloat(float value) {
-        PrepareBuilder();
-        result.packedFloat_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedFloat(scg::IEnumerable<float> values) {
-        PrepareBuilder();
-        result.packedFloat_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedFloat() {
-        PrepareBuilder();
-        result.packedFloat_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<double> PackedDoubleList {
-        get { return PrepareBuilder().packedDouble_; }
-      }
-      public int PackedDoubleCount {
-        get { return result.PackedDoubleCount; }
-      }
-      public double GetPackedDouble(int index) {
-        return result.GetPackedDouble(index);
-      }
-      public Builder SetPackedDouble(int index, double value) {
-        PrepareBuilder();
-        result.packedDouble_[index] = value;
-        return this;
-      }
-      public Builder AddPackedDouble(double value) {
-        PrepareBuilder();
-        result.packedDouble_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedDouble(scg::IEnumerable<double> values) {
-        PrepareBuilder();
-        result.packedDouble_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedDouble() {
-        PrepareBuilder();
-        result.packedDouble_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<bool> PackedBoolList {
-        get { return PrepareBuilder().packedBool_; }
-      }
-      public int PackedBoolCount {
-        get { return result.PackedBoolCount; }
-      }
-      public bool GetPackedBool(int index) {
-        return result.GetPackedBool(index);
-      }
-      public Builder SetPackedBool(int index, bool value) {
-        PrepareBuilder();
-        result.packedBool_[index] = value;
-        return this;
-      }
-      public Builder AddPackedBool(bool value) {
-        PrepareBuilder();
-        result.packedBool_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedBool(scg::IEnumerable<bool> values) {
-        PrepareBuilder();
-        result.packedBool_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedBool() {
-        PrepareBuilder();
-        result.packedBool_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> PackedEnumList {
-        get { return PrepareBuilder().packedEnum_; }
-      }
-      public int PackedEnumCount {
-        get { return result.PackedEnumCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetPackedEnum(int index) {
-        return result.GetPackedEnum(index);
-      }
-      public Builder SetPackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.packedEnum_[index] = value;
-        return this;
-      }
-      public Builder AddPackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.packedEnum_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {
-        PrepareBuilder();
-        result.packedEnum_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedEnum() {
-        PrepareBuilder();
-        result.packedEnum_.Clear();
-        return this;
-      }
-    }
-    static TestPackedTypes() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestUnpackedTypes : pb::GeneratedMessage<TestUnpackedTypes, TestUnpackedTypes.Builder> {
-    private TestUnpackedTypes() { }
-    private static readonly TestUnpackedTypes defaultInstance = new TestUnpackedTypes().MakeReadOnly();
-    private static readonly string[] _testUnpackedTypesFieldNames = new string[] { "unpacked_bool", "unpacked_double", "unpacked_enum", "unpacked_fixed32", "unpacked_fixed64", "unpacked_float", "unpacked_int32", "unpacked_int64", "unpacked_sfixed32", "unpacked_sfixed64", "unpacked_sint32", "unpacked_sint64", "unpacked_uint32", "unpacked_uint64" };
-    private static readonly uint[] _testUnpackedTypesFieldTags = new uint[] { 816, 809, 824, 773, 777, 805, 720, 728, 789, 793, 752, 760, 736, 744 };
-    public static TestUnpackedTypes DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestUnpackedTypes DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestUnpackedTypes ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestUnpackedTypes, TestUnpackedTypes.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable; }
-    }
-
-    public const int UnpackedInt32FieldNumber = 90;
-    private pbc::PopsicleList<int> unpackedInt32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> UnpackedInt32List {
-      get { return pbc::Lists.AsReadOnly(unpackedInt32_); }
-    }
-    public int UnpackedInt32Count {
-      get { return unpackedInt32_.Count; }
-    }
-    public int GetUnpackedInt32(int index) {
-      return unpackedInt32_[index];
-    }
-
-    public const int UnpackedInt64FieldNumber = 91;
-    private pbc::PopsicleList<long> unpackedInt64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> UnpackedInt64List {
-      get { return pbc::Lists.AsReadOnly(unpackedInt64_); }
-    }
-    public int UnpackedInt64Count {
-      get { return unpackedInt64_.Count; }
-    }
-    public long GetUnpackedInt64(int index) {
-      return unpackedInt64_[index];
-    }
-
-    public const int UnpackedUint32FieldNumber = 92;
-    private pbc::PopsicleList<uint> unpackedUint32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> UnpackedUint32List {
-      get { return pbc::Lists.AsReadOnly(unpackedUint32_); }
-    }
-    public int UnpackedUint32Count {
-      get { return unpackedUint32_.Count; }
-    }
-    public uint GetUnpackedUint32(int index) {
-      return unpackedUint32_[index];
-    }
-
-    public const int UnpackedUint64FieldNumber = 93;
-    private pbc::PopsicleList<ulong> unpackedUint64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> UnpackedUint64List {
-      get { return pbc::Lists.AsReadOnly(unpackedUint64_); }
-    }
-    public int UnpackedUint64Count {
-      get { return unpackedUint64_.Count; }
-    }
-    public ulong GetUnpackedUint64(int index) {
-      return unpackedUint64_[index];
-    }
-
-    public const int UnpackedSint32FieldNumber = 94;
-    private pbc::PopsicleList<int> unpackedSint32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> UnpackedSint32List {
-      get { return pbc::Lists.AsReadOnly(unpackedSint32_); }
-    }
-    public int UnpackedSint32Count {
-      get { return unpackedSint32_.Count; }
-    }
-    public int GetUnpackedSint32(int index) {
-      return unpackedSint32_[index];
-    }
-
-    public const int UnpackedSint64FieldNumber = 95;
-    private pbc::PopsicleList<long> unpackedSint64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> UnpackedSint64List {
-      get { return pbc::Lists.AsReadOnly(unpackedSint64_); }
-    }
-    public int UnpackedSint64Count {
-      get { return unpackedSint64_.Count; }
-    }
-    public long GetUnpackedSint64(int index) {
-      return unpackedSint64_[index];
-    }
-
-    public const int UnpackedFixed32FieldNumber = 96;
-    private pbc::PopsicleList<uint> unpackedFixed32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> UnpackedFixed32List {
-      get { return pbc::Lists.AsReadOnly(unpackedFixed32_); }
-    }
-    public int UnpackedFixed32Count {
-      get { return unpackedFixed32_.Count; }
-    }
-    public uint GetUnpackedFixed32(int index) {
-      return unpackedFixed32_[index];
-    }
-
-    public const int UnpackedFixed64FieldNumber = 97;
-    private pbc::PopsicleList<ulong> unpackedFixed64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> UnpackedFixed64List {
-      get { return pbc::Lists.AsReadOnly(unpackedFixed64_); }
-    }
-    public int UnpackedFixed64Count {
-      get { return unpackedFixed64_.Count; }
-    }
-    public ulong GetUnpackedFixed64(int index) {
-      return unpackedFixed64_[index];
-    }
-
-    public const int UnpackedSfixed32FieldNumber = 98;
-    private pbc::PopsicleList<int> unpackedSfixed32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> UnpackedSfixed32List {
-      get { return pbc::Lists.AsReadOnly(unpackedSfixed32_); }
-    }
-    public int UnpackedSfixed32Count {
-      get { return unpackedSfixed32_.Count; }
-    }
-    public int GetUnpackedSfixed32(int index) {
-      return unpackedSfixed32_[index];
-    }
-
-    public const int UnpackedSfixed64FieldNumber = 99;
-    private pbc::PopsicleList<long> unpackedSfixed64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> UnpackedSfixed64List {
-      get { return pbc::Lists.AsReadOnly(unpackedSfixed64_); }
-    }
-    public int UnpackedSfixed64Count {
-      get { return unpackedSfixed64_.Count; }
-    }
-    public long GetUnpackedSfixed64(int index) {
-      return unpackedSfixed64_[index];
-    }
-
-    public const int UnpackedFloatFieldNumber = 100;
-    private pbc::PopsicleList<float> unpackedFloat_ = new pbc::PopsicleList<float>();
-    public scg::IList<float> UnpackedFloatList {
-      get { return pbc::Lists.AsReadOnly(unpackedFloat_); }
-    }
-    public int UnpackedFloatCount {
-      get { return unpackedFloat_.Count; }
-    }
-    public float GetUnpackedFloat(int index) {
-      return unpackedFloat_[index];
-    }
-
-    public const int UnpackedDoubleFieldNumber = 101;
-    private pbc::PopsicleList<double> unpackedDouble_ = new pbc::PopsicleList<double>();
-    public scg::IList<double> UnpackedDoubleList {
-      get { return pbc::Lists.AsReadOnly(unpackedDouble_); }
-    }
-    public int UnpackedDoubleCount {
-      get { return unpackedDouble_.Count; }
-    }
-    public double GetUnpackedDouble(int index) {
-      return unpackedDouble_[index];
-    }
-
-    public const int UnpackedBoolFieldNumber = 102;
-    private pbc::PopsicleList<bool> unpackedBool_ = new pbc::PopsicleList<bool>();
-    public scg::IList<bool> UnpackedBoolList {
-      get { return pbc::Lists.AsReadOnly(unpackedBool_); }
-    }
-    public int UnpackedBoolCount {
-      get { return unpackedBool_.Count; }
-    }
-    public bool GetUnpackedBool(int index) {
-      return unpackedBool_[index];
-    }
-
-    public const int UnpackedEnumFieldNumber = 103;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> unpackedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> UnpackedEnumList {
-      get { return pbc::Lists.AsReadOnly(unpackedEnum_); }
-    }
-    public int UnpackedEnumCount {
-      get { return unpackedEnum_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetUnpackedEnum(int index) {
-      return unpackedEnum_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testUnpackedTypesFieldNames;
-      if (unpackedInt32_.Count > 0) {
-        output.WriteInt32Array(90, field_names[6], unpackedInt32_);
-      }
-      if (unpackedInt64_.Count > 0) {
-        output.WriteInt64Array(91, field_names[7], unpackedInt64_);
-      }
-      if (unpackedUint32_.Count > 0) {
-        output.WriteUInt32Array(92, field_names[12], unpackedUint32_);
-      }
-      if (unpackedUint64_.Count > 0) {
-        output.WriteUInt64Array(93, field_names[13], unpackedUint64_);
-      }
-      if (unpackedSint32_.Count > 0) {
-        output.WriteSInt32Array(94, field_names[10], unpackedSint32_);
-      }
-      if (unpackedSint64_.Count > 0) {
-        output.WriteSInt64Array(95, field_names[11], unpackedSint64_);
-      }
-      if (unpackedFixed32_.Count > 0) {
-        output.WriteFixed32Array(96, field_names[3], unpackedFixed32_);
-      }
-      if (unpackedFixed64_.Count > 0) {
-        output.WriteFixed64Array(97, field_names[4], unpackedFixed64_);
-      }
-      if (unpackedSfixed32_.Count > 0) {
-        output.WriteSFixed32Array(98, field_names[8], unpackedSfixed32_);
-      }
-      if (unpackedSfixed64_.Count > 0) {
-        output.WriteSFixed64Array(99, field_names[9], unpackedSfixed64_);
-      }
-      if (unpackedFloat_.Count > 0) {
-        output.WriteFloatArray(100, field_names[5], unpackedFloat_);
-      }
-      if (unpackedDouble_.Count > 0) {
-        output.WriteDoubleArray(101, field_names[1], unpackedDouble_);
-      }
-      if (unpackedBool_.Count > 0) {
-        output.WriteBoolArray(102, field_names[0], unpackedBool_);
-      }
-      if (unpackedEnum_.Count > 0) {
-        output.WriteEnumArray(103, field_names[2], unpackedEnum_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      {
-        int dataSize = 0;
-        foreach (int element in UnpackedInt32List) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * unpackedInt32_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in UnpackedInt64List) {
-          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * unpackedInt64_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (uint element in UnpackedUint32List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * unpackedUint32_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (ulong element in UnpackedUint64List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * unpackedUint64_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in UnpackedSint32List) {
-          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * unpackedSint32_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in UnpackedSint64List) {
-          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * unpackedSint64_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * unpackedFixed32_.Count;
-        size += dataSize;
-        size += 2 * unpackedFixed32_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * unpackedFixed64_.Count;
-        size += dataSize;
-        size += 2 * unpackedFixed64_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * unpackedSfixed32_.Count;
-        size += dataSize;
-        size += 2 * unpackedSfixed32_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * unpackedSfixed64_.Count;
-        size += dataSize;
-        size += 2 * unpackedSfixed64_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * unpackedFloat_.Count;
-        size += dataSize;
-        size += 2 * unpackedFloat_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * unpackedDouble_.Count;
-        size += dataSize;
-        size += 2 * unpackedDouble_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 1 * unpackedBool_.Count;
-        size += dataSize;
-        size += 2 * unpackedBool_.Count;
-      }
-      {
-        int dataSize = 0;
-        if (unpackedEnum_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in unpackedEnum_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 2 * unpackedEnum_.Count;
-        }
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestUnpackedTypes ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestUnpackedTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestUnpackedTypes MakeReadOnly() {
-      unpackedInt32_.MakeReadOnly();
-      unpackedInt64_.MakeReadOnly();
-      unpackedUint32_.MakeReadOnly();
-      unpackedUint64_.MakeReadOnly();
-      unpackedSint32_.MakeReadOnly();
-      unpackedSint64_.MakeReadOnly();
-      unpackedFixed32_.MakeReadOnly();
-      unpackedFixed64_.MakeReadOnly();
-      unpackedSfixed32_.MakeReadOnly();
-      unpackedSfixed64_.MakeReadOnly();
-      unpackedFloat_.MakeReadOnly();
-      unpackedDouble_.MakeReadOnly();
-      unpackedBool_.MakeReadOnly();
-      unpackedEnum_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestUnpackedTypes prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestUnpackedTypes, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestUnpackedTypes cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestUnpackedTypes result;
-
-      private TestUnpackedTypes PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestUnpackedTypes original = result;
-          result = new TestUnpackedTypes();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestUnpackedTypes MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Descriptor; }
-      }
-
-      public override TestUnpackedTypes DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.DefaultInstance; }
-      }
-
-      public override TestUnpackedTypes BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestUnpackedTypes) {
-          return MergeFrom((TestUnpackedTypes) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestUnpackedTypes other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.unpackedInt32_.Count != 0) {
-          result.unpackedInt32_.Add(other.unpackedInt32_);
-        }
-        if (other.unpackedInt64_.Count != 0) {
-          result.unpackedInt64_.Add(other.unpackedInt64_);
-        }
-        if (other.unpackedUint32_.Count != 0) {
-          result.unpackedUint32_.Add(other.unpackedUint32_);
-        }
-        if (other.unpackedUint64_.Count != 0) {
-          result.unpackedUint64_.Add(other.unpackedUint64_);
-        }
-        if (other.unpackedSint32_.Count != 0) {
-          result.unpackedSint32_.Add(other.unpackedSint32_);
-        }
-        if (other.unpackedSint64_.Count != 0) {
-          result.unpackedSint64_.Add(other.unpackedSint64_);
-        }
-        if (other.unpackedFixed32_.Count != 0) {
-          result.unpackedFixed32_.Add(other.unpackedFixed32_);
-        }
-        if (other.unpackedFixed64_.Count != 0) {
-          result.unpackedFixed64_.Add(other.unpackedFixed64_);
-        }
-        if (other.unpackedSfixed32_.Count != 0) {
-          result.unpackedSfixed32_.Add(other.unpackedSfixed32_);
-        }
-        if (other.unpackedSfixed64_.Count != 0) {
-          result.unpackedSfixed64_.Add(other.unpackedSfixed64_);
-        }
-        if (other.unpackedFloat_.Count != 0) {
-          result.unpackedFloat_.Add(other.unpackedFloat_);
-        }
-        if (other.unpackedDouble_.Count != 0) {
-          result.unpackedDouble_.Add(other.unpackedDouble_);
-        }
-        if (other.unpackedBool_.Count != 0) {
-          result.unpackedBool_.Add(other.unpackedBool_);
-        }
-        if (other.unpackedEnum_.Count != 0) {
-          result.unpackedEnum_.Add(other.unpackedEnum_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testUnpackedTypesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testUnpackedTypesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 722:
-            case 720: {
-              input.ReadInt32Array(tag, field_name, result.unpackedInt32_);
-              break;
-            }
-            case 730:
-            case 728: {
-              input.ReadInt64Array(tag, field_name, result.unpackedInt64_);
-              break;
-            }
-            case 738:
-            case 736: {
-              input.ReadUInt32Array(tag, field_name, result.unpackedUint32_);
-              break;
-            }
-            case 746:
-            case 744: {
-              input.ReadUInt64Array(tag, field_name, result.unpackedUint64_);
-              break;
-            }
-            case 754:
-            case 752: {
-              input.ReadSInt32Array(tag, field_name, result.unpackedSint32_);
-              break;
-            }
-            case 762:
-            case 760: {
-              input.ReadSInt64Array(tag, field_name, result.unpackedSint64_);
-              break;
-            }
-            case 770:
-            case 773: {
-              input.ReadFixed32Array(tag, field_name, result.unpackedFixed32_);
-              break;
-            }
-            case 778:
-            case 777: {
-              input.ReadFixed64Array(tag, field_name, result.unpackedFixed64_);
-              break;
-            }
-            case 786:
-            case 789: {
-              input.ReadSFixed32Array(tag, field_name, result.unpackedSfixed32_);
-              break;
-            }
-            case 794:
-            case 793: {
-              input.ReadSFixed64Array(tag, field_name, result.unpackedSfixed64_);
-              break;
-            }
-            case 802:
-            case 805: {
-              input.ReadFloatArray(tag, field_name, result.unpackedFloat_);
-              break;
-            }
-            case 810:
-            case 809: {
-              input.ReadDoubleArray(tag, field_name, result.unpackedDouble_);
-              break;
-            }
-            case 818:
-            case 816: {
-              input.ReadBoolArray(tag, field_name, result.unpackedBool_);
-              break;
-            }
-            case 826:
-            case 824: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.unpackedEnum_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(103, (ulong)(int)rawValue);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public pbc::IPopsicleList<int> UnpackedInt32List {
-        get { return PrepareBuilder().unpackedInt32_; }
-      }
-      public int UnpackedInt32Count {
-        get { return result.UnpackedInt32Count; }
-      }
-      public int GetUnpackedInt32(int index) {
-        return result.GetUnpackedInt32(index);
-      }
-      public Builder SetUnpackedInt32(int index, int value) {
-        PrepareBuilder();
-        result.unpackedInt32_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedInt32(int value) {
-        PrepareBuilder();
-        result.unpackedInt32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedInt32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.unpackedInt32_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedInt32() {
-        PrepareBuilder();
-        result.unpackedInt32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> UnpackedInt64List {
-        get { return PrepareBuilder().unpackedInt64_; }
-      }
-      public int UnpackedInt64Count {
-        get { return result.UnpackedInt64Count; }
-      }
-      public long GetUnpackedInt64(int index) {
-        return result.GetUnpackedInt64(index);
-      }
-      public Builder SetUnpackedInt64(int index, long value) {
-        PrepareBuilder();
-        result.unpackedInt64_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedInt64(long value) {
-        PrepareBuilder();
-        result.unpackedInt64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedInt64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.unpackedInt64_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedInt64() {
-        PrepareBuilder();
-        result.unpackedInt64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<uint> UnpackedUint32List {
-        get { return PrepareBuilder().unpackedUint32_; }
-      }
-      public int UnpackedUint32Count {
-        get { return result.UnpackedUint32Count; }
-      }
-      public uint GetUnpackedUint32(int index) {
-        return result.GetUnpackedUint32(index);
-      }
-      public Builder SetUnpackedUint32(int index, uint value) {
-        PrepareBuilder();
-        result.unpackedUint32_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedUint32(uint value) {
-        PrepareBuilder();
-        result.unpackedUint32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedUint32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.unpackedUint32_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedUint32() {
-        PrepareBuilder();
-        result.unpackedUint32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> UnpackedUint64List {
-        get { return PrepareBuilder().unpackedUint64_; }
-      }
-      public int UnpackedUint64Count {
-        get { return result.UnpackedUint64Count; }
-      }
-      public ulong GetUnpackedUint64(int index) {
-        return result.GetUnpackedUint64(index);
-      }
-      public Builder SetUnpackedUint64(int index, ulong value) {
-        PrepareBuilder();
-        result.unpackedUint64_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedUint64(ulong value) {
-        PrepareBuilder();
-        result.unpackedUint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedUint64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.unpackedUint64_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedUint64() {
-        PrepareBuilder();
-        result.unpackedUint64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> UnpackedSint32List {
-        get { return PrepareBuilder().unpackedSint32_; }
-      }
-      public int UnpackedSint32Count {
-        get { return result.UnpackedSint32Count; }
-      }
-      public int GetUnpackedSint32(int index) {
-        return result.GetUnpackedSint32(index);
-      }
-      public Builder SetUnpackedSint32(int index, int value) {
-        PrepareBuilder();
-        result.unpackedSint32_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedSint32(int value) {
-        PrepareBuilder();
-        result.unpackedSint32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedSint32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.unpackedSint32_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedSint32() {
-        PrepareBuilder();
-        result.unpackedSint32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> UnpackedSint64List {
-        get { return PrepareBuilder().unpackedSint64_; }
-      }
-      public int UnpackedSint64Count {
-        get { return result.UnpackedSint64Count; }
-      }
-      public long GetUnpackedSint64(int index) {
-        return result.GetUnpackedSint64(index);
-      }
-      public Builder SetUnpackedSint64(int index, long value) {
-        PrepareBuilder();
-        result.unpackedSint64_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedSint64(long value) {
-        PrepareBuilder();
-        result.unpackedSint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedSint64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.unpackedSint64_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedSint64() {
-        PrepareBuilder();
-        result.unpackedSint64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<uint> UnpackedFixed32List {
-        get { return PrepareBuilder().unpackedFixed32_; }
-      }
-      public int UnpackedFixed32Count {
-        get { return result.UnpackedFixed32Count; }
-      }
-      public uint GetUnpackedFixed32(int index) {
-        return result.GetUnpackedFixed32(index);
-      }
-      public Builder SetUnpackedFixed32(int index, uint value) {
-        PrepareBuilder();
-        result.unpackedFixed32_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedFixed32(uint value) {
-        PrepareBuilder();
-        result.unpackedFixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedFixed32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.unpackedFixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedFixed32() {
-        PrepareBuilder();
-        result.unpackedFixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> UnpackedFixed64List {
-        get { return PrepareBuilder().unpackedFixed64_; }
-      }
-      public int UnpackedFixed64Count {
-        get { return result.UnpackedFixed64Count; }
-      }
-      public ulong GetUnpackedFixed64(int index) {
-        return result.GetUnpackedFixed64(index);
-      }
-      public Builder SetUnpackedFixed64(int index, ulong value) {
-        PrepareBuilder();
-        result.unpackedFixed64_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedFixed64(ulong value) {
-        PrepareBuilder();
-        result.unpackedFixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedFixed64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.unpackedFixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedFixed64() {
-        PrepareBuilder();
-        result.unpackedFixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> UnpackedSfixed32List {
-        get { return PrepareBuilder().unpackedSfixed32_; }
-      }
-      public int UnpackedSfixed32Count {
-        get { return result.UnpackedSfixed32Count; }
-      }
-      public int GetUnpackedSfixed32(int index) {
-        return result.GetUnpackedSfixed32(index);
-      }
-      public Builder SetUnpackedSfixed32(int index, int value) {
-        PrepareBuilder();
-        result.unpackedSfixed32_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedSfixed32(int value) {
-        PrepareBuilder();
-        result.unpackedSfixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedSfixed32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.unpackedSfixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedSfixed32() {
-        PrepareBuilder();
-        result.unpackedSfixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> UnpackedSfixed64List {
-        get { return PrepareBuilder().unpackedSfixed64_; }
-      }
-      public int UnpackedSfixed64Count {
-        get { return result.UnpackedSfixed64Count; }
-      }
-      public long GetUnpackedSfixed64(int index) {
-        return result.GetUnpackedSfixed64(index);
-      }
-      public Builder SetUnpackedSfixed64(int index, long value) {
-        PrepareBuilder();
-        result.unpackedSfixed64_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedSfixed64(long value) {
-        PrepareBuilder();
-        result.unpackedSfixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedSfixed64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.unpackedSfixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedSfixed64() {
-        PrepareBuilder();
-        result.unpackedSfixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<float> UnpackedFloatList {
-        get { return PrepareBuilder().unpackedFloat_; }
-      }
-      public int UnpackedFloatCount {
-        get { return result.UnpackedFloatCount; }
-      }
-      public float GetUnpackedFloat(int index) {
-        return result.GetUnpackedFloat(index);
-      }
-      public Builder SetUnpackedFloat(int index, float value) {
-        PrepareBuilder();
-        result.unpackedFloat_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedFloat(float value) {
-        PrepareBuilder();
-        result.unpackedFloat_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedFloat(scg::IEnumerable<float> values) {
-        PrepareBuilder();
-        result.unpackedFloat_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedFloat() {
-        PrepareBuilder();
-        result.unpackedFloat_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<double> UnpackedDoubleList {
-        get { return PrepareBuilder().unpackedDouble_; }
-      }
-      public int UnpackedDoubleCount {
-        get { return result.UnpackedDoubleCount; }
-      }
-      public double GetUnpackedDouble(int index) {
-        return result.GetUnpackedDouble(index);
-      }
-      public Builder SetUnpackedDouble(int index, double value) {
-        PrepareBuilder();
-        result.unpackedDouble_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedDouble(double value) {
-        PrepareBuilder();
-        result.unpackedDouble_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedDouble(scg::IEnumerable<double> values) {
-        PrepareBuilder();
-        result.unpackedDouble_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedDouble() {
-        PrepareBuilder();
-        result.unpackedDouble_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<bool> UnpackedBoolList {
-        get { return PrepareBuilder().unpackedBool_; }
-      }
-      public int UnpackedBoolCount {
-        get { return result.UnpackedBoolCount; }
-      }
-      public bool GetUnpackedBool(int index) {
-        return result.GetUnpackedBool(index);
-      }
-      public Builder SetUnpackedBool(int index, bool value) {
-        PrepareBuilder();
-        result.unpackedBool_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedBool(bool value) {
-        PrepareBuilder();
-        result.unpackedBool_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedBool(scg::IEnumerable<bool> values) {
-        PrepareBuilder();
-        result.unpackedBool_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedBool() {
-        PrepareBuilder();
-        result.unpackedBool_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> UnpackedEnumList {
-        get { return PrepareBuilder().unpackedEnum_; }
-      }
-      public int UnpackedEnumCount {
-        get { return result.UnpackedEnumCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetUnpackedEnum(int index) {
-        return result.GetUnpackedEnum(index);
-      }
-      public Builder SetUnpackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.unpackedEnum_[index] = value;
-        return this;
-      }
-      public Builder AddUnpackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.unpackedEnum_.Add(value);
-        return this;
-      }
-      public Builder AddRangeUnpackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {
-        PrepareBuilder();
-        result.unpackedEnum_.Add(values);
-        return this;
-      }
-      public Builder ClearUnpackedEnum() {
-        PrepareBuilder();
-        result.unpackedEnum_.Clear();
-        return this;
-      }
-    }
-    static TestUnpackedTypes() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestPackedExtensions : pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder> {
-    private TestPackedExtensions() { }
-    private static readonly TestPackedExtensions defaultInstance = new TestPackedExtensions().MakeReadOnly();
-    private static readonly string[] _testPackedExtensionsFieldNames = new string[] {  };
-    private static readonly uint[] _testPackedExtensionsFieldTags = new uint[] {  };
-    public static TestPackedExtensions DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestPackedExtensions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestPackedExtensions ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestPackedExtensions__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestPackedExtensions, TestPackedExtensions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testPackedExtensionsFieldNames;
-      pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestPackedExtensions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestPackedExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestPackedExtensions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestPackedExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestPackedExtensions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestPackedExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestPackedExtensions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestPackedExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestPackedExtensions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestPackedExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestPackedExtensions MakeReadOnly() {
-      return this;
-    }
-
-    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(TestPackedExtensions prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestPackedExtensions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestPackedExtensions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestPackedExtensions result;
-
-      private TestPackedExtensions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestPackedExtensions original = result;
-          result = new TestPackedExtensions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestPackedExtensions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Descriptor; }
-      }
-
-      public override TestPackedExtensions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.DefaultInstance; }
-      }
-
-      public override TestPackedExtensions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestPackedExtensions) {
-          return MergeFrom((TestPackedExtensions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestPackedExtensions other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.DefaultInstance) return this;
-        PrepareBuilder();
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testPackedExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testPackedExtensionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestPackedExtensions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestUnpackedExtensions : pb::ExtendableMessage<TestUnpackedExtensions, TestUnpackedExtensions.Builder> {
-    private TestUnpackedExtensions() { }
-    private static readonly TestUnpackedExtensions defaultInstance = new TestUnpackedExtensions().MakeReadOnly();
-    private static readonly string[] _testUnpackedExtensionsFieldNames = new string[] {  };
-    private static readonly uint[] _testUnpackedExtensionsFieldTags = new uint[] {  };
-    public static TestUnpackedExtensions DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestUnpackedExtensions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestUnpackedExtensions ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestUnpackedExtensions__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestUnpackedExtensions, TestUnpackedExtensions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestUnpackedExtensions__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testUnpackedExtensionsFieldNames;
-      pb::ExtendableMessage<TestUnpackedExtensions, TestUnpackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestUnpackedExtensions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestUnpackedExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestUnpackedExtensions MakeReadOnly() {
-      return this;
-    }
-
-    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(TestUnpackedExtensions prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestUnpackedExtensions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestUnpackedExtensions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestUnpackedExtensions result;
-
-      private TestUnpackedExtensions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestUnpackedExtensions original = result;
-          result = new TestUnpackedExtensions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestUnpackedExtensions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.Descriptor; }
-      }
-
-      public override TestUnpackedExtensions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.DefaultInstance; }
-      }
-
-      public override TestUnpackedExtensions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestUnpackedExtensions) {
-          return MergeFrom((TestUnpackedExtensions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestUnpackedExtensions other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.DefaultInstance) return this;
-        PrepareBuilder();
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testUnpackedExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testUnpackedExtensionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestUnpackedExtensions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestDynamicExtensions : pb::GeneratedMessage<TestDynamicExtensions, TestDynamicExtensions.Builder> {
-    private TestDynamicExtensions() { }
-    private static readonly TestDynamicExtensions defaultInstance = new TestDynamicExtensions().MakeReadOnly();
-    private static readonly string[] _testDynamicExtensionsFieldNames = new string[] { "dynamic_enum_extension", "dynamic_message_extension", "enum_extension", "message_extension", "packed_extension", "repeated_extension", "scalar_extension" };
-    private static readonly uint[] _testDynamicExtensionsFieldTags = new uint[] { 16016, 16034, 16008, 16026, 16050, 16042, 16005 };
-    public static TestDynamicExtensions DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestDynamicExtensions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestDynamicExtensions ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestDynamicExtensions, TestDynamicExtensions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum DynamicEnumType {
-        DYNAMIC_FOO = 2200,
-        DYNAMIC_BAR = 2201,
-        DYNAMIC_BAZ = 2202,
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class DynamicMessageType : pb::GeneratedMessage<DynamicMessageType, DynamicMessageType.Builder> {
-        private DynamicMessageType() { }
-        private static readonly DynamicMessageType defaultInstance = new DynamicMessageType().MakeReadOnly();
-        private static readonly string[] _dynamicMessageTypeFieldNames = new string[] { "dynamic_field" };
-        private static readonly uint[] _dynamicMessageTypeFieldTags = new uint[] { 16800 };
-        public static DynamicMessageType DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override DynamicMessageType DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override DynamicMessageType ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<DynamicMessageType, DynamicMessageType.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable; }
-        }
-
-        public const int DynamicFieldFieldNumber = 2100;
-        private bool hasDynamicField;
-        private int dynamicField_;
-        public bool HasDynamicField {
-          get { return hasDynamicField; }
-        }
-        public int DynamicField {
-          get { return dynamicField_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _dynamicMessageTypeFieldNames;
-          if (hasDynamicField) {
-            output.WriteInt32(2100, field_names[0], DynamicField);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasDynamicField) {
-            size += pb::CodedOutputStream.ComputeInt32Size(2100, DynamicField);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static DynamicMessageType ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static DynamicMessageType ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static DynamicMessageType ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static DynamicMessageType ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static DynamicMessageType ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static DynamicMessageType ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static DynamicMessageType ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static DynamicMessageType ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static DynamicMessageType ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static DynamicMessageType ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private DynamicMessageType MakeReadOnly() {
-          return this;
-        }
-
-        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(DynamicMessageType prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<DynamicMessageType, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(DynamicMessageType cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private DynamicMessageType result;
-
-          private DynamicMessageType PrepareBuilder() {
-            if (resultIsReadOnly) {
-              DynamicMessageType original = result;
-              result = new DynamicMessageType();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override DynamicMessageType MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Descriptor; }
-          }
-
-          public override DynamicMessageType DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance; }
-          }
-
-          public override DynamicMessageType BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is DynamicMessageType) {
-              return MergeFrom((DynamicMessageType) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(DynamicMessageType other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasDynamicField) {
-              DynamicField = other.DynamicField;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_dynamicMessageTypeFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _dynamicMessageTypeFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 16800: {
-                  result.hasDynamicField = input.ReadInt32(ref result.dynamicField_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasDynamicField {
-            get { return result.hasDynamicField; }
-          }
-          public int DynamicField {
-            get { return result.DynamicField; }
-            set { SetDynamicField(value); }
-          }
-          public Builder SetDynamicField(int value) {
-            PrepareBuilder();
-            result.hasDynamicField = true;
-            result.dynamicField_ = value;
-            return this;
-          }
-          public Builder ClearDynamicField() {
-            PrepareBuilder();
-            result.hasDynamicField = false;
-            result.dynamicField_ = 0;
-            return this;
-          }
-        }
-        static DynamicMessageType() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int ScalarExtensionFieldNumber = 2000;
-    private bool hasScalarExtension;
-    private uint scalarExtension_;
-    public bool HasScalarExtension {
-      get { return hasScalarExtension; }
-    }
-    public uint ScalarExtension {
-      get { return scalarExtension_; }
-    }
-
-    public const int EnumExtensionFieldNumber = 2001;
-    private bool hasEnumExtension;
-    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum enumExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;
-    public bool HasEnumExtension {
-      get { return hasEnumExtension; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumExtension {
-      get { return enumExtension_; }
-    }
-
-    public const int DynamicEnumExtensionFieldNumber = 2002;
-    private bool hasDynamicEnumExtension;
-    private global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType dynamicEnumExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType.DYNAMIC_FOO;
-    public bool HasDynamicEnumExtension {
-      get { return hasDynamicEnumExtension; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType DynamicEnumExtension {
-      get { return dynamicEnumExtension_; }
-    }
-
-    public const int MessageExtensionFieldNumber = 2003;
-    private bool hasMessageExtension;
-    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage messageExtension_;
-    public bool HasMessageExtension {
-      get { return hasMessageExtension; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageExtension {
-      get { return messageExtension_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }
-    }
-
-    public const int DynamicMessageExtensionFieldNumber = 2004;
-    private bool hasDynamicMessageExtension;
-    private global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType dynamicMessageExtension_;
-    public bool HasDynamicMessageExtension {
-      get { return hasDynamicMessageExtension; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType DynamicMessageExtension {
-      get { return dynamicMessageExtension_ ?? global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance; }
-    }
-
-    public const int RepeatedExtensionFieldNumber = 2005;
-    private pbc::PopsicleList<string> repeatedExtension_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedExtensionList {
-      get { return pbc::Lists.AsReadOnly(repeatedExtension_); }
-    }
-    public int RepeatedExtensionCount {
-      get { return repeatedExtension_.Count; }
-    }
-    public string GetRepeatedExtension(int index) {
-      return repeatedExtension_[index];
-    }
-
-    public const int PackedExtensionFieldNumber = 2006;
-    private int packedExtensionMemoizedSerializedSize;
-    private pbc::PopsicleList<int> packedExtension_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> PackedExtensionList {
-      get { return pbc::Lists.AsReadOnly(packedExtension_); }
-    }
-    public int PackedExtensionCount {
-      get { return packedExtension_.Count; }
-    }
-    public int GetPackedExtension(int index) {
-      return packedExtension_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testDynamicExtensionsFieldNames;
-      if (hasScalarExtension) {
-        output.WriteFixed32(2000, field_names[6], ScalarExtension);
-      }
-      if (hasEnumExtension) {
-        output.WriteEnum(2001, field_names[2], (int) EnumExtension, EnumExtension);
-      }
-      if (hasDynamicEnumExtension) {
-        output.WriteEnum(2002, field_names[0], (int) DynamicEnumExtension, DynamicEnumExtension);
-      }
-      if (hasMessageExtension) {
-        output.WriteMessage(2003, field_names[3], MessageExtension);
-      }
-      if (hasDynamicMessageExtension) {
-        output.WriteMessage(2004, field_names[1], DynamicMessageExtension);
-      }
-      if (repeatedExtension_.Count > 0) {
-        output.WriteStringArray(2005, field_names[5], repeatedExtension_);
-      }
-      if (packedExtension_.Count > 0) {
-        output.WritePackedSInt32Array(2006, field_names[4], packedExtensionMemoizedSerializedSize, packedExtension_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasScalarExtension) {
-        size += pb::CodedOutputStream.ComputeFixed32Size(2000, ScalarExtension);
-      }
-      if (hasEnumExtension) {
-        size += pb::CodedOutputStream.ComputeEnumSize(2001, (int) EnumExtension);
-      }
-      if (hasDynamicEnumExtension) {
-        size += pb::CodedOutputStream.ComputeEnumSize(2002, (int) DynamicEnumExtension);
-      }
-      if (hasMessageExtension) {
-        size += pb::CodedOutputStream.ComputeMessageSize(2003, MessageExtension);
-      }
-      if (hasDynamicMessageExtension) {
-        size += pb::CodedOutputStream.ComputeMessageSize(2004, DynamicMessageExtension);
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedExtensionList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedExtension_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in PackedExtensionList) {
-          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        if (packedExtension_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        packedExtensionMemoizedSerializedSize = dataSize;
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestDynamicExtensions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestDynamicExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestDynamicExtensions MakeReadOnly() {
-      repeatedExtension_.MakeReadOnly();
-      packedExtension_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestDynamicExtensions prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestDynamicExtensions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestDynamicExtensions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestDynamicExtensions result;
-
-      private TestDynamicExtensions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestDynamicExtensions original = result;
-          result = new TestDynamicExtensions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestDynamicExtensions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Descriptor; }
-      }
-
-      public override TestDynamicExtensions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.DefaultInstance; }
-      }
-
-      public override TestDynamicExtensions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestDynamicExtensions) {
-          return MergeFrom((TestDynamicExtensions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestDynamicExtensions other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasScalarExtension) {
-          ScalarExtension = other.ScalarExtension;
-        }
-        if (other.HasEnumExtension) {
-          EnumExtension = other.EnumExtension;
-        }
-        if (other.HasDynamicEnumExtension) {
-          DynamicEnumExtension = other.DynamicEnumExtension;
-        }
-        if (other.HasMessageExtension) {
-          MergeMessageExtension(other.MessageExtension);
-        }
-        if (other.HasDynamicMessageExtension) {
-          MergeDynamicMessageExtension(other.DynamicMessageExtension);
-        }
-        if (other.repeatedExtension_.Count != 0) {
-          result.repeatedExtension_.Add(other.repeatedExtension_);
-        }
-        if (other.packedExtension_.Count != 0) {
-          result.packedExtension_.Add(other.packedExtension_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testDynamicExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testDynamicExtensionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 16005: {
-              result.hasScalarExtension = input.ReadFixed32(ref result.scalarExtension_);
-              break;
-            }
-            case 16008: {
-              object unknown;
-              if(input.ReadEnum(ref result.enumExtension_, out unknown)) {
-                result.hasEnumExtension = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(2001, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 16016: {
-              object unknown;
-              if(input.ReadEnum(ref result.dynamicEnumExtension_, out unknown)) {
-                result.hasDynamicEnumExtension = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(2002, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 16026: {
-              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();
-              if (result.hasMessageExtension) {
-                subBuilder.MergeFrom(MessageExtension);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              MessageExtension = subBuilder.BuildPartial();
-              break;
-            }
-            case 16034: {
-              global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.CreateBuilder();
-              if (result.hasDynamicMessageExtension) {
-                subBuilder.MergeFrom(DynamicMessageExtension);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              DynamicMessageExtension = subBuilder.BuildPartial();
-              break;
-            }
-            case 16042: {
-              input.ReadStringArray(tag, field_name, result.repeatedExtension_);
-              break;
-            }
-            case 16050:
-            case 16048: {
-              input.ReadSInt32Array(tag, field_name, result.packedExtension_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasScalarExtension {
-        get { return result.hasScalarExtension; }
-      }
-      public uint ScalarExtension {
-        get { return result.ScalarExtension; }
-        set { SetScalarExtension(value); }
-      }
-      public Builder SetScalarExtension(uint value) {
-        PrepareBuilder();
-        result.hasScalarExtension = true;
-        result.scalarExtension_ = value;
-        return this;
-      }
-      public Builder ClearScalarExtension() {
-        PrepareBuilder();
-        result.hasScalarExtension = false;
-        result.scalarExtension_ = 0;
-        return this;
-      }
-
-      public bool HasEnumExtension {
-        get { return result.hasEnumExtension; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumExtension {
-        get { return result.EnumExtension; }
-        set { SetEnumExtension(value); }
-      }
-      public Builder SetEnumExtension(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {
-        PrepareBuilder();
-        result.hasEnumExtension = true;
-        result.enumExtension_ = value;
-        return this;
-      }
-      public Builder ClearEnumExtension() {
-        PrepareBuilder();
-        result.hasEnumExtension = false;
-        result.enumExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;
-        return this;
-      }
-
-      public bool HasDynamicEnumExtension {
-        get { return result.hasDynamicEnumExtension; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType DynamicEnumExtension {
-        get { return result.DynamicEnumExtension; }
-        set { SetDynamicEnumExtension(value); }
-      }
-      public Builder SetDynamicEnumExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType value) {
-        PrepareBuilder();
-        result.hasDynamicEnumExtension = true;
-        result.dynamicEnumExtension_ = value;
-        return this;
-      }
-      public Builder ClearDynamicEnumExtension() {
-        PrepareBuilder();
-        result.hasDynamicEnumExtension = false;
-        result.dynamicEnumExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType.DYNAMIC_FOO;
-        return this;
-      }
-
-      public bool HasMessageExtension {
-       get { return result.hasMessageExtension; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageExtension {
-        get { return result.MessageExtension; }
-        set { SetMessageExtension(value); }
-      }
-      public Builder SetMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasMessageExtension = true;
-        result.messageExtension_ = value;
-        return this;
-      }
-      public Builder SetMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasMessageExtension = true;
-        result.messageExtension_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasMessageExtension &&
-            result.messageExtension_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {
-            result.messageExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageExtension_).MergeFrom(value).BuildPartial();
-        } else {
-          result.messageExtension_ = value;
-        }
-        result.hasMessageExtension = true;
-        return this;
-      }
-      public Builder ClearMessageExtension() {
-        PrepareBuilder();
-        result.hasMessageExtension = false;
-        result.messageExtension_ = null;
-        return this;
-      }
-
-      public bool HasDynamicMessageExtension {
-       get { return result.hasDynamicMessageExtension; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType DynamicMessageExtension {
-        get { return result.DynamicMessageExtension; }
-        set { SetDynamicMessageExtension(value); }
-      }
-      public Builder SetDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasDynamicMessageExtension = true;
-        result.dynamicMessageExtension_ = value;
-        return this;
-      }
-      public Builder SetDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasDynamicMessageExtension = true;
-        result.dynamicMessageExtension_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasDynamicMessageExtension &&
-            result.dynamicMessageExtension_ != global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance) {
-            result.dynamicMessageExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.CreateBuilder(result.dynamicMessageExtension_).MergeFrom(value).BuildPartial();
-        } else {
-          result.dynamicMessageExtension_ = value;
-        }
-        result.hasDynamicMessageExtension = true;
-        return this;
-      }
-      public Builder ClearDynamicMessageExtension() {
-        PrepareBuilder();
-        result.hasDynamicMessageExtension = false;
-        result.dynamicMessageExtension_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedExtensionList {
-        get { return PrepareBuilder().repeatedExtension_; }
-      }
-      public int RepeatedExtensionCount {
-        get { return result.RepeatedExtensionCount; }
-      }
-      public string GetRepeatedExtension(int index) {
-        return result.GetRepeatedExtension(index);
-      }
-      public Builder SetRepeatedExtension(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedExtension_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedExtension(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedExtension_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedExtension(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedExtension_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedExtension() {
-        PrepareBuilder();
-        result.repeatedExtension_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> PackedExtensionList {
-        get { return PrepareBuilder().packedExtension_; }
-      }
-      public int PackedExtensionCount {
-        get { return result.PackedExtensionCount; }
-      }
-      public int GetPackedExtension(int index) {
-        return result.GetPackedExtension(index);
-      }
-      public Builder SetPackedExtension(int index, int value) {
-        PrepareBuilder();
-        result.packedExtension_[index] = value;
-        return this;
-      }
-      public Builder AddPackedExtension(int value) {
-        PrepareBuilder();
-        result.packedExtension_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedExtension(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.packedExtension_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedExtension() {
-        PrepareBuilder();
-        result.packedExtension_.Clear();
-        return this;
-      }
-    }
-    static TestDynamicExtensions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestRepeatedScalarDifferentTagSizes : pb::GeneratedMessage<TestRepeatedScalarDifferentTagSizes, TestRepeatedScalarDifferentTagSizes.Builder> {
-    private TestRepeatedScalarDifferentTagSizes() { }
-    private static readonly TestRepeatedScalarDifferentTagSizes defaultInstance = new TestRepeatedScalarDifferentTagSizes().MakeReadOnly();
-    private static readonly string[] _testRepeatedScalarDifferentTagSizesFieldNames = new string[] { "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_int32", "repeated_int64", "repeated_uint64" };
-    private static readonly uint[] _testRepeatedScalarDifferentTagSizesFieldTags = new uint[] { 101, 16369, 2097141, 104, 16376, 2097144 };
-    public static TestRepeatedScalarDifferentTagSizes DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestRepeatedScalarDifferentTagSizes DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestRepeatedScalarDifferentTagSizes ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestRepeatedScalarDifferentTagSizes, TestRepeatedScalarDifferentTagSizes.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable; }
-    }
-
-    public const int RepeatedFixed32FieldNumber = 12;
-    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> RepeatedFixed32List {
-      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }
-    }
-    public int RepeatedFixed32Count {
-      get { return repeatedFixed32_.Count; }
-    }
-    public uint GetRepeatedFixed32(int index) {
-      return repeatedFixed32_[index];
-    }
-
-    public const int RepeatedInt32FieldNumber = 13;
-    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> RepeatedInt32List {
-      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }
-    }
-    public int RepeatedInt32Count {
-      get { return repeatedInt32_.Count; }
-    }
-    public int GetRepeatedInt32(int index) {
-      return repeatedInt32_[index];
-    }
-
-    public const int RepeatedFixed64FieldNumber = 2046;
-    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> RepeatedFixed64List {
-      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }
-    }
-    public int RepeatedFixed64Count {
-      get { return repeatedFixed64_.Count; }
-    }
-    public ulong GetRepeatedFixed64(int index) {
-      return repeatedFixed64_[index];
-    }
-
-    public const int RepeatedInt64FieldNumber = 2047;
-    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> RepeatedInt64List {
-      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }
-    }
-    public int RepeatedInt64Count {
-      get { return repeatedInt64_.Count; }
-    }
-    public long GetRepeatedInt64(int index) {
-      return repeatedInt64_[index];
-    }
-
-    public const int RepeatedFloatFieldNumber = 262142;
-    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();
-    public scg::IList<float> RepeatedFloatList {
-      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }
-    }
-    public int RepeatedFloatCount {
-      get { return repeatedFloat_.Count; }
-    }
-    public float GetRepeatedFloat(int index) {
-      return repeatedFloat_[index];
-    }
-
-    public const int RepeatedUint64FieldNumber = 262143;
-    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> RepeatedUint64List {
-      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }
-    }
-    public int RepeatedUint64Count {
-      get { return repeatedUint64_.Count; }
-    }
-    public ulong GetRepeatedUint64(int index) {
-      return repeatedUint64_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testRepeatedScalarDifferentTagSizesFieldNames;
-      if (repeatedFixed32_.Count > 0) {
-        output.WriteFixed32Array(12, field_names[0], repeatedFixed32_);
-      }
-      if (repeatedInt32_.Count > 0) {
-        output.WriteInt32Array(13, field_names[3], repeatedInt32_);
-      }
-      if (repeatedFixed64_.Count > 0) {
-        output.WriteFixed64Array(2046, field_names[1], repeatedFixed64_);
-      }
-      if (repeatedInt64_.Count > 0) {
-        output.WriteInt64Array(2047, field_names[4], repeatedInt64_);
-      }
-      if (repeatedFloat_.Count > 0) {
-        output.WriteFloatArray(262142, field_names[2], repeatedFloat_);
-      }
-      if (repeatedUint64_.Count > 0) {
-        output.WriteUInt64Array(262143, field_names[5], repeatedUint64_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      {
-        int dataSize = 0;
-        dataSize = 4 * repeatedFixed32_.Count;
-        size += dataSize;
-        size += 1 * repeatedFixed32_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in RepeatedInt32List) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * repeatedInt32_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * repeatedFixed64_.Count;
-        size += dataSize;
-        size += 2 * repeatedFixed64_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in RepeatedInt64List) {
-          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedInt64_.Count;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * repeatedFloat_.Count;
-        size += dataSize;
-        size += 3 * repeatedFloat_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (ulong element in RepeatedUint64List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 3 * repeatedUint64_.Count;
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestRepeatedScalarDifferentTagSizes MakeReadOnly() {
-      repeatedFixed32_.MakeReadOnly();
-      repeatedInt32_.MakeReadOnly();
-      repeatedFixed64_.MakeReadOnly();
-      repeatedInt64_.MakeReadOnly();
-      repeatedFloat_.MakeReadOnly();
-      repeatedUint64_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestRepeatedScalarDifferentTagSizes prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestRepeatedScalarDifferentTagSizes, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestRepeatedScalarDifferentTagSizes cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestRepeatedScalarDifferentTagSizes result;
-
-      private TestRepeatedScalarDifferentTagSizes PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestRepeatedScalarDifferentTagSizes original = result;
-          result = new TestRepeatedScalarDifferentTagSizes();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestRepeatedScalarDifferentTagSizes MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Descriptor; }
-      }
-
-      public override TestRepeatedScalarDifferentTagSizes DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.DefaultInstance; }
-      }
-
-      public override TestRepeatedScalarDifferentTagSizes BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestRepeatedScalarDifferentTagSizes) {
-          return MergeFrom((TestRepeatedScalarDifferentTagSizes) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestRepeatedScalarDifferentTagSizes other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.repeatedFixed32_.Count != 0) {
-          result.repeatedFixed32_.Add(other.repeatedFixed32_);
-        }
-        if (other.repeatedInt32_.Count != 0) {
-          result.repeatedInt32_.Add(other.repeatedInt32_);
-        }
-        if (other.repeatedFixed64_.Count != 0) {
-          result.repeatedFixed64_.Add(other.repeatedFixed64_);
-        }
-        if (other.repeatedInt64_.Count != 0) {
-          result.repeatedInt64_.Add(other.repeatedInt64_);
-        }
-        if (other.repeatedFloat_.Count != 0) {
-          result.repeatedFloat_.Add(other.repeatedFloat_);
-        }
-        if (other.repeatedUint64_.Count != 0) {
-          result.repeatedUint64_.Add(other.repeatedUint64_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testRepeatedScalarDifferentTagSizesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testRepeatedScalarDifferentTagSizesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 98:
-            case 101: {
-              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);
-              break;
-            }
-            case 106:
-            case 104: {
-              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);
-              break;
-            }
-            case 16370:
-            case 16369: {
-              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);
-              break;
-            }
-            case 16378:
-            case 16376: {
-              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);
-              break;
-            }
-            case 2097138:
-            case 2097141: {
-              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);
-              break;
-            }
-            case 2097146:
-            case 2097144: {
-              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public pbc::IPopsicleList<uint> RepeatedFixed32List {
-        get { return PrepareBuilder().repeatedFixed32_; }
-      }
-      public int RepeatedFixed32Count {
-        get { return result.RepeatedFixed32Count; }
-      }
-      public uint GetRepeatedFixed32(int index) {
-        return result.GetRepeatedFixed32(index);
-      }
-      public Builder SetRepeatedFixed32(int index, uint value) {
-        PrepareBuilder();
-        result.repeatedFixed32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFixed32(uint value) {
-        PrepareBuilder();
-        result.repeatedFixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.repeatedFixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFixed32() {
-        PrepareBuilder();
-        result.repeatedFixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> RepeatedInt32List {
-        get { return PrepareBuilder().repeatedInt32_; }
-      }
-      public int RepeatedInt32Count {
-        get { return result.RepeatedInt32Count; }
-      }
-      public int GetRepeatedInt32(int index) {
-        return result.GetRepeatedInt32(index);
-      }
-      public Builder SetRepeatedInt32(int index, int value) {
-        PrepareBuilder();
-        result.repeatedInt32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedInt32(int value) {
-        PrepareBuilder();
-        result.repeatedInt32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.repeatedInt32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedInt32() {
-        PrepareBuilder();
-        result.repeatedInt32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> RepeatedFixed64List {
-        get { return PrepareBuilder().repeatedFixed64_; }
-      }
-      public int RepeatedFixed64Count {
-        get { return result.RepeatedFixed64Count; }
-      }
-      public ulong GetRepeatedFixed64(int index) {
-        return result.GetRepeatedFixed64(index);
-      }
-      public Builder SetRepeatedFixed64(int index, ulong value) {
-        PrepareBuilder();
-        result.repeatedFixed64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFixed64(ulong value) {
-        PrepareBuilder();
-        result.repeatedFixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.repeatedFixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFixed64() {
-        PrepareBuilder();
-        result.repeatedFixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> RepeatedInt64List {
-        get { return PrepareBuilder().repeatedInt64_; }
-      }
-      public int RepeatedInt64Count {
-        get { return result.RepeatedInt64Count; }
-      }
-      public long GetRepeatedInt64(int index) {
-        return result.GetRepeatedInt64(index);
-      }
-      public Builder SetRepeatedInt64(int index, long value) {
-        PrepareBuilder();
-        result.repeatedInt64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedInt64(long value) {
-        PrepareBuilder();
-        result.repeatedInt64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.repeatedInt64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedInt64() {
-        PrepareBuilder();
-        result.repeatedInt64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<float> RepeatedFloatList {
-        get { return PrepareBuilder().repeatedFloat_; }
-      }
-      public int RepeatedFloatCount {
-        get { return result.RepeatedFloatCount; }
-      }
-      public float GetRepeatedFloat(int index) {
-        return result.GetRepeatedFloat(index);
-      }
-      public Builder SetRepeatedFloat(int index, float value) {
-        PrepareBuilder();
-        result.repeatedFloat_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFloat(float value) {
-        PrepareBuilder();
-        result.repeatedFloat_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {
-        PrepareBuilder();
-        result.repeatedFloat_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFloat() {
-        PrepareBuilder();
-        result.repeatedFloat_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> RepeatedUint64List {
-        get { return PrepareBuilder().repeatedUint64_; }
-      }
-      public int RepeatedUint64Count {
-        get { return result.RepeatedUint64Count; }
-      }
-      public ulong GetRepeatedUint64(int index) {
-        return result.GetRepeatedUint64(index);
-      }
-      public Builder SetRepeatedUint64(int index, ulong value) {
-        PrepareBuilder();
-        result.repeatedUint64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedUint64(ulong value) {
-        PrepareBuilder();
-        result.repeatedUint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.repeatedUint64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedUint64() {
-        PrepareBuilder();
-        result.repeatedUint64_.Clear();
-        return this;
-      }
-    }
-    static TestRepeatedScalarDifferentTagSizes() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestParsingMerge : pb::ExtendableMessage<TestParsingMerge, TestParsingMerge.Builder> {
-    private TestParsingMerge() { }
-    private static readonly TestParsingMerge defaultInstance = new TestParsingMerge().MakeReadOnly();
-    private static readonly string[] _testParsingMergeFieldNames = new string[] { "optional_all_types", "optionalgroup", "repeated_all_types", "repeatedgroup", "required_all_types" };
-    private static readonly uint[] _testParsingMergeFieldTags = new uint[] { 18, 83, 26, 163, 10 };
-    public static TestParsingMerge DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestParsingMerge DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestParsingMerge ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestParsingMerge, TestParsingMerge.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge__FieldAccessorTable; }
-    }
-
-    public const int OptionalExtFieldNumber = 1000;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> OptionalExt;
-    public const int RepeatedExtFieldNumber = 1001;
-    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>> RepeatedExt;
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class RepeatedFieldsGenerator : pb::GeneratedMessage<RepeatedFieldsGenerator, RepeatedFieldsGenerator.Builder> {
-        private RepeatedFieldsGenerator() { }
-        private static readonly RepeatedFieldsGenerator defaultInstance = new RepeatedFieldsGenerator().MakeReadOnly();
-        private static readonly string[] _repeatedFieldsGeneratorFieldNames = new string[] { "ext1", "ext2", "field1", "field2", "field3", "group1", "group2" };
-        private static readonly uint[] _repeatedFieldsGeneratorFieldTags = new uint[] { 8002, 8010, 10, 18, 26, 83, 163 };
-        public static RepeatedFieldsGenerator DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override RepeatedFieldsGenerator DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override RepeatedFieldsGenerator ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<RepeatedFieldsGenerator, RepeatedFieldsGenerator.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator__FieldAccessorTable; }
-        }
-
-        #region Nested types
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public static partial class Types {
-          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-          public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {
-            private Group1() { }
-            private static readonly Group1 defaultInstance = new Group1().MakeReadOnly();
-            private static readonly string[] _group1FieldNames = new string[] { "field1" };
-            private static readonly uint[] _group1FieldTags = new uint[] { 90 };
-            public static Group1 DefaultInstance {
-              get { return defaultInstance; }
-            }
-
-            public override Group1 DefaultInstanceForType {
-              get { return DefaultInstance; }
-            }
-
-            protected override Group1 ThisMessage {
-              get { return this; }
-            }
-
-            public static pbd::MessageDescriptor Descriptor {
-              get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group1__Descriptor; }
-            }
-
-            protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {
-              get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group1__FieldAccessorTable; }
-            }
-
-            public const int Field1FieldNumber = 11;
-            private bool hasField1;
-            private global::Google.ProtocolBuffers.TestProtos.TestAllTypes field1_;
-            public bool HasField1 {
-              get { return hasField1; }
-            }
-            public global::Google.ProtocolBuffers.TestProtos.TestAllTypes Field1 {
-              get { return field1_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-            }
-
-            public override bool IsInitialized {
-              get {
-                return true;
-              }
-            }
-
-            public override void WriteTo(pb::ICodedOutputStream output) {
-              CalcSerializedSize();
-              string[] field_names = _group1FieldNames;
-              if (hasField1) {
-                output.WriteMessage(11, field_names[0], Field1);
-              }
-              UnknownFields.WriteTo(output);
-            }
-
-            private int memoizedSerializedSize = -1;
-            public override int SerializedSize {
-              get {
-                int size = memoizedSerializedSize;
-                if (size != -1) return size;
-                return CalcSerializedSize();
-              }
-            }
-
-            private int CalcSerializedSize() {
-              int size = memoizedSerializedSize;
-              if (size != -1) return size;
-
-              size = 0;
-              if (hasField1) {
-                size += pb::CodedOutputStream.ComputeMessageSize(11, Field1);
-              }
-              size += UnknownFields.SerializedSize;
-              memoizedSerializedSize = size;
-              return size;
-            }
-            public static Group1 ParseFrom(pb::ByteString data) {
-              return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-            }
-            public static Group1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-              return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-            }
-            public static Group1 ParseFrom(byte[] data) {
-              return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-            }
-            public static Group1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-              return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-            }
-            public static Group1 ParseFrom(global::System.IO.Stream input) {
-              return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-            }
-            public static Group1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-              return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-            }
-            public static Group1 ParseDelimitedFrom(global::System.IO.Stream input) {
-              return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-            }
-            public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-              return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-            }
-            public static Group1 ParseFrom(pb::ICodedInputStream input) {
-              return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-            }
-            public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-              return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-            }
-            private Group1 MakeReadOnly() {
-              return this;
-            }
-
-            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(Group1 prototype) {
-              return new Builder(prototype);
-            }
-
-            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-            public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {
-              protected override Builder ThisBuilder {
-                get { return this; }
-              }
-              public Builder() {
-                result = DefaultInstance;
-                resultIsReadOnly = true;
-              }
-              internal Builder(Group1 cloneFrom) {
-                result = cloneFrom;
-                resultIsReadOnly = true;
-              }
-
-              private bool resultIsReadOnly;
-              private Group1 result;
-
-              private Group1 PrepareBuilder() {
-                if (resultIsReadOnly) {
-                  Group1 original = result;
-                  result = new Group1();
-                  resultIsReadOnly = false;
-                  MergeFrom(original);
-                }
-                return result;
-              }
-
-              public override bool IsInitialized {
-                get { return result.IsInitialized; }
-              }
-
-              protected override Group1 MessageBeingBuilt {
-                get { return PrepareBuilder(); }
-              }
-
-              public override Builder Clear() {
-                result = DefaultInstance;
-                resultIsReadOnly = true;
-                return this;
-              }
-
-              public override Builder Clone() {
-                if (resultIsReadOnly) {
-                  return new Builder(result);
-                } else {
-                  return new Builder().MergeFrom(result);
-                }
-              }
-
-              public override pbd::MessageDescriptor DescriptorForType {
-                get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1.Descriptor; }
-              }
-
-              public override Group1 DefaultInstanceForType {
-                get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1.DefaultInstance; }
-              }
-
-              public override Group1 BuildPartial() {
-                if (resultIsReadOnly) {
-                  return result;
-                }
-                resultIsReadOnly = true;
-                return result.MakeReadOnly();
-              }
-
-              public override Builder MergeFrom(pb::IMessage other) {
-                if (other is Group1) {
-                  return MergeFrom((Group1) other);
-                } else {
-                  base.MergeFrom(other);
-                  return this;
-                }
-              }
-
-              public override Builder MergeFrom(Group1 other) {
-                if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1.DefaultInstance) return this;
-                PrepareBuilder();
-                if (other.HasField1) {
-                  MergeField1(other.Field1);
-                }
-                this.MergeUnknownFields(other.UnknownFields);
-                return this;
-              }
-
-              public override Builder MergeFrom(pb::ICodedInputStream input) {
-                return MergeFrom(input, pb::ExtensionRegistry.Empty);
-              }
-
-              public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-                PrepareBuilder();
-                pb::UnknownFieldSet.Builder unknownFields = null;
-                uint tag;
-                string field_name;
-                while (input.ReadTag(out tag, out field_name)) {
-                  if(tag == 0 && field_name != null) {
-                    int field_ordinal = global::System.Array.BinarySearch(_group1FieldNames, field_name, global::System.StringComparer.Ordinal);
-                    if(field_ordinal >= 0)
-                      tag = _group1FieldTags[field_ordinal];
-                    else {
-                      if (unknownFields == null) {
-                        unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                      }
-                      ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                      continue;
-                    }
-                  }
-                  switch (tag) {
-                    case 0: {
-                      throw pb::InvalidProtocolBufferException.InvalidTag();
-                    }
-                    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, field_name);
-                      break;
-                    }
-                    case 90: {
-                      global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-                      if (result.hasField1) {
-                        subBuilder.MergeFrom(Field1);
-                      }
-                      input.ReadMessage(subBuilder, extensionRegistry);
-                      Field1 = subBuilder.BuildPartial();
-                      break;
-                    }
-                  }
-                }
-
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-
-
-              public bool HasField1 {
-               get { return result.hasField1; }
-              }
-              public global::Google.ProtocolBuffers.TestProtos.TestAllTypes Field1 {
-                get { return result.Field1; }
-                set { SetField1(value); }
-              }
-              public Builder SetField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-                pb::ThrowHelper.ThrowIfNull(value, "value");
-                PrepareBuilder();
-                result.hasField1 = true;
-                result.field1_ = value;
-                return this;
-              }
-              public Builder SetField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-                pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-                PrepareBuilder();
-                result.hasField1 = true;
-                result.field1_ = builderForValue.Build();
-                return this;
-              }
-              public Builder MergeField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-                pb::ThrowHelper.ThrowIfNull(value, "value");
-                PrepareBuilder();
-                if (result.hasField1 &&
-                    result.field1_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-                    result.field1_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.field1_).MergeFrom(value).BuildPartial();
-                } else {
-                  result.field1_ = value;
-                }
-                result.hasField1 = true;
-                return this;
-              }
-              public Builder ClearField1() {
-                PrepareBuilder();
-                result.hasField1 = false;
-                result.field1_ = null;
-                return this;
-              }
-            }
-            static Group1() {
-              object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-            }
-          }
-
-          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-          public sealed partial class Group2 : pb::GeneratedMessage<Group2, Group2.Builder> {
-            private Group2() { }
-            private static readonly Group2 defaultInstance = new Group2().MakeReadOnly();
-            private static readonly string[] _group2FieldNames = new string[] { "field1" };
-            private static readonly uint[] _group2FieldTags = new uint[] { 170 };
-            public static Group2 DefaultInstance {
-              get { return defaultInstance; }
-            }
-
-            public override Group2 DefaultInstanceForType {
-              get { return DefaultInstance; }
-            }
-
-            protected override Group2 ThisMessage {
-              get { return this; }
-            }
-
-            public static pbd::MessageDescriptor Descriptor {
-              get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group2__Descriptor; }
-            }
-
-            protected override pb::FieldAccess.FieldAccessorTable<Group2, Group2.Builder> InternalFieldAccessors {
-              get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_RepeatedFieldsGenerator_Group2__FieldAccessorTable; }
-            }
-
-            public const int Field1FieldNumber = 21;
-            private bool hasField1;
-            private global::Google.ProtocolBuffers.TestProtos.TestAllTypes field1_;
-            public bool HasField1 {
-              get { return hasField1; }
-            }
-            public global::Google.ProtocolBuffers.TestProtos.TestAllTypes Field1 {
-              get { return field1_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-            }
-
-            public override bool IsInitialized {
-              get {
-                return true;
-              }
-            }
-
-            public override void WriteTo(pb::ICodedOutputStream output) {
-              CalcSerializedSize();
-              string[] field_names = _group2FieldNames;
-              if (hasField1) {
-                output.WriteMessage(21, field_names[0], Field1);
-              }
-              UnknownFields.WriteTo(output);
-            }
-
-            private int memoizedSerializedSize = -1;
-            public override int SerializedSize {
-              get {
-                int size = memoizedSerializedSize;
-                if (size != -1) return size;
-                return CalcSerializedSize();
-              }
-            }
-
-            private int CalcSerializedSize() {
-              int size = memoizedSerializedSize;
-              if (size != -1) return size;
-
-              size = 0;
-              if (hasField1) {
-                size += pb::CodedOutputStream.ComputeMessageSize(21, Field1);
-              }
-              size += UnknownFields.SerializedSize;
-              memoizedSerializedSize = size;
-              return size;
-            }
-            public static Group2 ParseFrom(pb::ByteString data) {
-              return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-            }
-            public static Group2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-              return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-            }
-            public static Group2 ParseFrom(byte[] data) {
-              return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-            }
-            public static Group2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-              return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-            }
-            public static Group2 ParseFrom(global::System.IO.Stream input) {
-              return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-            }
-            public static Group2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-              return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-            }
-            public static Group2 ParseDelimitedFrom(global::System.IO.Stream input) {
-              return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-            }
-            public static Group2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-              return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-            }
-            public static Group2 ParseFrom(pb::ICodedInputStream input) {
-              return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-            }
-            public static Group2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-              return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-            }
-            private Group2 MakeReadOnly() {
-              return this;
-            }
-
-            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(Group2 prototype) {
-              return new Builder(prototype);
-            }
-
-            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-            public sealed partial class Builder : pb::GeneratedBuilder<Group2, Builder> {
-              protected override Builder ThisBuilder {
-                get { return this; }
-              }
-              public Builder() {
-                result = DefaultInstance;
-                resultIsReadOnly = true;
-              }
-              internal Builder(Group2 cloneFrom) {
-                result = cloneFrom;
-                resultIsReadOnly = true;
-              }
-
-              private bool resultIsReadOnly;
-              private Group2 result;
-
-              private Group2 PrepareBuilder() {
-                if (resultIsReadOnly) {
-                  Group2 original = result;
-                  result = new Group2();
-                  resultIsReadOnly = false;
-                  MergeFrom(original);
-                }
-                return result;
-              }
-
-              public override bool IsInitialized {
-                get { return result.IsInitialized; }
-              }
-
-              protected override Group2 MessageBeingBuilt {
-                get { return PrepareBuilder(); }
-              }
-
-              public override Builder Clear() {
-                result = DefaultInstance;
-                resultIsReadOnly = true;
-                return this;
-              }
-
-              public override Builder Clone() {
-                if (resultIsReadOnly) {
-                  return new Builder(result);
-                } else {
-                  return new Builder().MergeFrom(result);
-                }
-              }
-
-              public override pbd::MessageDescriptor DescriptorForType {
-                get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2.Descriptor; }
-              }
-
-              public override Group2 DefaultInstanceForType {
-                get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2.DefaultInstance; }
-              }
-
-              public override Group2 BuildPartial() {
-                if (resultIsReadOnly) {
-                  return result;
-                }
-                resultIsReadOnly = true;
-                return result.MakeReadOnly();
-              }
-
-              public override Builder MergeFrom(pb::IMessage other) {
-                if (other is Group2) {
-                  return MergeFrom((Group2) other);
-                } else {
-                  base.MergeFrom(other);
-                  return this;
-                }
-              }
-
-              public override Builder MergeFrom(Group2 other) {
-                if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2.DefaultInstance) return this;
-                PrepareBuilder();
-                if (other.HasField1) {
-                  MergeField1(other.Field1);
-                }
-                this.MergeUnknownFields(other.UnknownFields);
-                return this;
-              }
-
-              public override Builder MergeFrom(pb::ICodedInputStream input) {
-                return MergeFrom(input, pb::ExtensionRegistry.Empty);
-              }
-
-              public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-                PrepareBuilder();
-                pb::UnknownFieldSet.Builder unknownFields = null;
-                uint tag;
-                string field_name;
-                while (input.ReadTag(out tag, out field_name)) {
-                  if(tag == 0 && field_name != null) {
-                    int field_ordinal = global::System.Array.BinarySearch(_group2FieldNames, field_name, global::System.StringComparer.Ordinal);
-                    if(field_ordinal >= 0)
-                      tag = _group2FieldTags[field_ordinal];
-                    else {
-                      if (unknownFields == null) {
-                        unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                      }
-                      ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                      continue;
-                    }
-                  }
-                  switch (tag) {
-                    case 0: {
-                      throw pb::InvalidProtocolBufferException.InvalidTag();
-                    }
-                    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, field_name);
-                      break;
-                    }
-                    case 170: {
-                      global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-                      if (result.hasField1) {
-                        subBuilder.MergeFrom(Field1);
-                      }
-                      input.ReadMessage(subBuilder, extensionRegistry);
-                      Field1 = subBuilder.BuildPartial();
-                      break;
-                    }
-                  }
-                }
-
-                if (unknownFields != null) {
-                  this.UnknownFields = unknownFields.Build();
-                }
-                return this;
-              }
-
-
-              public bool HasField1 {
-               get { return result.hasField1; }
-              }
-              public global::Google.ProtocolBuffers.TestProtos.TestAllTypes Field1 {
-                get { return result.Field1; }
-                set { SetField1(value); }
-              }
-              public Builder SetField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-                pb::ThrowHelper.ThrowIfNull(value, "value");
-                PrepareBuilder();
-                result.hasField1 = true;
-                result.field1_ = value;
-                return this;
-              }
-              public Builder SetField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-                pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-                PrepareBuilder();
-                result.hasField1 = true;
-                result.field1_ = builderForValue.Build();
-                return this;
-              }
-              public Builder MergeField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-                pb::ThrowHelper.ThrowIfNull(value, "value");
-                PrepareBuilder();
-                if (result.hasField1 &&
-                    result.field1_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-                    result.field1_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.field1_).MergeFrom(value).BuildPartial();
-                } else {
-                  result.field1_ = value;
-                }
-                result.hasField1 = true;
-                return this;
-              }
-              public Builder ClearField1() {
-                PrepareBuilder();
-                result.hasField1 = false;
-                result.field1_ = null;
-                return this;
-              }
-            }
-            static Group2() {
-              object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-            }
-          }
-
-        }
-        #endregion
-
-        public const int Field1FieldNumber = 1;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> field1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Field1List {
-          get { return field1_; }
-        }
-        public int Field1Count {
-          get { return field1_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetField1(int index) {
-          return field1_[index];
-        }
-
-        public const int Field2FieldNumber = 2;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> field2_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Field2List {
-          get { return field2_; }
-        }
-        public int Field2Count {
-          get { return field2_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetField2(int index) {
-          return field2_[index];
-        }
-
-        public const int Field3FieldNumber = 3;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> field3_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Field3List {
-          get { return field3_; }
-        }
-        public int Field3Count {
-          get { return field3_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetField3(int index) {
-          return field3_[index];
-        }
-
-        public const int Group1FieldNumber = 10;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1> group1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1> Group1List {
-          get { return group1_; }
-        }
-        public int Group1Count {
-          get { return group1_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1 GetGroup1(int index) {
-          return group1_[index];
-        }
-
-        public const int Group2FieldNumber = 20;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2> group2_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2> Group2List {
-          get { return group2_; }
-        }
-        public int Group2Count {
-          get { return group2_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2 GetGroup2(int index) {
-          return group2_[index];
-        }
-
-        public const int Ext1FieldNumber = 1000;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> ext1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Ext1List {
-          get { return ext1_; }
-        }
-        public int Ext1Count {
-          get { return ext1_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetExt1(int index) {
-          return ext1_[index];
-        }
-
-        public const int Ext2FieldNumber = 1001;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> ext2_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Ext2List {
-          get { return ext2_; }
-        }
-        public int Ext2Count {
-          get { return ext2_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetExt2(int index) {
-          return ext2_[index];
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _repeatedFieldsGeneratorFieldNames;
-          if (field1_.Count > 0) {
-            output.WriteMessageArray(1, field_names[2], field1_);
-          }
-          if (field2_.Count > 0) {
-            output.WriteMessageArray(2, field_names[3], field2_);
-          }
-          if (field3_.Count > 0) {
-            output.WriteMessageArray(3, field_names[4], field3_);
-          }
-          if (group1_.Count > 0) {
-            output.WriteGroupArray(10, field_names[5], group1_);
-          }
-          if (group2_.Count > 0) {
-            output.WriteGroupArray(20, field_names[6], group2_);
-          }
-          if (ext1_.Count > 0) {
-            output.WriteMessageArray(1000, field_names[0], ext1_);
-          }
-          if (ext2_.Count > 0) {
-            output.WriteMessageArray(1001, field_names[1], ext2_);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes element in Field1List) {
-            size += pb::CodedOutputStream.ComputeMessageSize(1, element);
-          }
-          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes element in Field2List) {
-            size += pb::CodedOutputStream.ComputeMessageSize(2, element);
-          }
-          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes element in Field3List) {
-            size += pb::CodedOutputStream.ComputeMessageSize(3, element);
-          }
-          foreach (global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1 element in Group1List) {
-            size += pb::CodedOutputStream.ComputeGroupSize(10, element);
-          }
-          foreach (global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2 element in Group2List) {
-            size += pb::CodedOutputStream.ComputeGroupSize(20, element);
-          }
-          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes element in Ext1List) {
-            size += pb::CodedOutputStream.ComputeMessageSize(1000, element);
-          }
-          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes element in Ext2List) {
-            size += pb::CodedOutputStream.ComputeMessageSize(1001, element);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static RepeatedFieldsGenerator ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static RepeatedFieldsGenerator ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private RepeatedFieldsGenerator MakeReadOnly() {
-          field1_.MakeReadOnly();
-          field2_.MakeReadOnly();
-          field3_.MakeReadOnly();
-          group1_.MakeReadOnly();
-          group2_.MakeReadOnly();
-          ext1_.MakeReadOnly();
-          ext2_.MakeReadOnly();
-          return this;
-        }
-
-        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(RepeatedFieldsGenerator prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<RepeatedFieldsGenerator, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(RepeatedFieldsGenerator cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private RepeatedFieldsGenerator result;
-
-          private RepeatedFieldsGenerator PrepareBuilder() {
-            if (resultIsReadOnly) {
-              RepeatedFieldsGenerator original = result;
-              result = new RepeatedFieldsGenerator();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override RepeatedFieldsGenerator MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Descriptor; }
-          }
-
-          public override RepeatedFieldsGenerator DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.DefaultInstance; }
-          }
-
-          public override RepeatedFieldsGenerator BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is RepeatedFieldsGenerator) {
-              return MergeFrom((RepeatedFieldsGenerator) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(RepeatedFieldsGenerator other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.field1_.Count != 0) {
-              result.field1_.Add(other.field1_);
-            }
-            if (other.field2_.Count != 0) {
-              result.field2_.Add(other.field2_);
-            }
-            if (other.field3_.Count != 0) {
-              result.field3_.Add(other.field3_);
-            }
-            if (other.group1_.Count != 0) {
-              result.group1_.Add(other.group1_);
-            }
-            if (other.group2_.Count != 0) {
-              result.group2_.Add(other.group2_);
-            }
-            if (other.ext1_.Count != 0) {
-              result.ext1_.Add(other.ext1_);
-            }
-            if (other.ext2_.Count != 0) {
-              result.ext2_.Add(other.ext2_);
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_repeatedFieldsGeneratorFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _repeatedFieldsGeneratorFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 10: {
-                  input.ReadMessageArray(tag, field_name, result.field1_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance, extensionRegistry);
-                  break;
-                }
-                case 18: {
-                  input.ReadMessageArray(tag, field_name, result.field2_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance, extensionRegistry);
-                  break;
-                }
-                case 26: {
-                  input.ReadMessageArray(tag, field_name, result.field3_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance, extensionRegistry);
-                  break;
-                }
-                case 83: {
-                  input.ReadGroupArray(tag, field_name, result.group1_, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1.DefaultInstance, extensionRegistry);
-                  break;
-                }
-                case 163: {
-                  input.ReadGroupArray(tag, field_name, result.group2_, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2.DefaultInstance, extensionRegistry);
-                  break;
-                }
-                case 8002: {
-                  input.ReadMessageArray(tag, field_name, result.ext1_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance, extensionRegistry);
-                  break;
-                }
-                case 8010: {
-                  input.ReadMessageArray(tag, field_name, result.ext2_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance, extensionRegistry);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Field1List {
-            get { return PrepareBuilder().field1_; }
-          }
-          public int Field1Count {
-            get { return result.Field1Count; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetField1(int index) {
-            return result.GetField1(index);
-          }
-          public Builder SetField1(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field1_[index] = value;
-            return this;
-          }
-          public Builder SetField1(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.field1_[index] = builderForValue.Build();
-            return this;
-          }
-          public Builder AddField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field1_.Add(value);
-            return this;
-          }
-          public Builder AddField1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.field1_.Add(builderForValue.Build());
-            return this;
-          }
-          public Builder AddRangeField1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> values) {
-            PrepareBuilder();
-            result.field1_.Add(values);
-            return this;
-          }
-          public Builder ClearField1() {
-            PrepareBuilder();
-            result.field1_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Field2List {
-            get { return PrepareBuilder().field2_; }
-          }
-          public int Field2Count {
-            get { return result.Field2Count; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetField2(int index) {
-            return result.GetField2(index);
-          }
-          public Builder SetField2(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field2_[index] = value;
-            return this;
-          }
-          public Builder SetField2(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.field2_[index] = builderForValue.Build();
-            return this;
-          }
-          public Builder AddField2(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field2_.Add(value);
-            return this;
-          }
-          public Builder AddField2(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.field2_.Add(builderForValue.Build());
-            return this;
-          }
-          public Builder AddRangeField2(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> values) {
-            PrepareBuilder();
-            result.field2_.Add(values);
-            return this;
-          }
-          public Builder ClearField2() {
-            PrepareBuilder();
-            result.field2_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Field3List {
-            get { return PrepareBuilder().field3_; }
-          }
-          public int Field3Count {
-            get { return result.Field3Count; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetField3(int index) {
-            return result.GetField3(index);
-          }
-          public Builder SetField3(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field3_[index] = value;
-            return this;
-          }
-          public Builder SetField3(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.field3_[index] = builderForValue.Build();
-            return this;
-          }
-          public Builder AddField3(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.field3_.Add(value);
-            return this;
-          }
-          public Builder AddField3(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.field3_.Add(builderForValue.Build());
-            return this;
-          }
-          public Builder AddRangeField3(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> values) {
-            PrepareBuilder();
-            result.field3_.Add(values);
-            return this;
-          }
-          public Builder ClearField3() {
-            PrepareBuilder();
-            result.field3_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1> Group1List {
-            get { return PrepareBuilder().group1_; }
-          }
-          public int Group1Count {
-            get { return result.Group1Count; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1 GetGroup1(int index) {
-            return result.GetGroup1(index);
-          }
-          public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1 value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.group1_[index] = value;
-            return this;
-          }
-          public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.group1_[index] = builderForValue.Build();
-            return this;
-          }
-          public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1 value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.group1_.Add(value);
-            return this;
-          }
-          public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.group1_.Add(builderForValue.Build());
-            return this;
-          }
-          public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group1> values) {
-            PrepareBuilder();
-            result.group1_.Add(values);
-            return this;
-          }
-          public Builder ClearGroup1() {
-            PrepareBuilder();
-            result.group1_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2> Group2List {
-            get { return PrepareBuilder().group2_; }
-          }
-          public int Group2Count {
-            get { return result.Group2Count; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2 GetGroup2(int index) {
-            return result.GetGroup2(index);
-          }
-          public Builder SetGroup2(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2 value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.group2_[index] = value;
-            return this;
-          }
-          public Builder SetGroup2(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.group2_[index] = builderForValue.Build();
-            return this;
-          }
-          public Builder AddGroup2(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2 value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.group2_.Add(value);
-            return this;
-          }
-          public Builder AddGroup2(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.group2_.Add(builderForValue.Build());
-            return this;
-          }
-          public Builder AddRangeGroup2(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedFieldsGenerator.Types.Group2> values) {
-            PrepareBuilder();
-            result.group2_.Add(values);
-            return this;
-          }
-          public Builder ClearGroup2() {
-            PrepareBuilder();
-            result.group2_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Ext1List {
-            get { return PrepareBuilder().ext1_; }
-          }
-          public int Ext1Count {
-            get { return result.Ext1Count; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetExt1(int index) {
-            return result.GetExt1(index);
-          }
-          public Builder SetExt1(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.ext1_[index] = value;
-            return this;
-          }
-          public Builder SetExt1(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.ext1_[index] = builderForValue.Build();
-            return this;
-          }
-          public Builder AddExt1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.ext1_.Add(value);
-            return this;
-          }
-          public Builder AddExt1(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.ext1_.Add(builderForValue.Build());
-            return this;
-          }
-          public Builder AddRangeExt1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> values) {
-            PrepareBuilder();
-            result.ext1_.Add(values);
-            return this;
-          }
-          public Builder ClearExt1() {
-            PrepareBuilder();
-            result.ext1_.Clear();
-            return this;
-          }
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> Ext2List {
-            get { return PrepareBuilder().ext2_; }
-          }
-          public int Ext2Count {
-            get { return result.Ext2Count; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetExt2(int index) {
-            return result.GetExt2(index);
-          }
-          public Builder SetExt2(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.ext2_[index] = value;
-            return this;
-          }
-          public Builder SetExt2(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.ext2_[index] = builderForValue.Build();
-            return this;
-          }
-          public Builder AddExt2(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.ext2_.Add(value);
-            return this;
-          }
-          public Builder AddExt2(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.ext2_.Add(builderForValue.Build());
-            return this;
-          }
-          public Builder AddRangeExt2(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> values) {
-            PrepareBuilder();
-            result.ext2_.Add(values);
-            return this;
-          }
-          public Builder ClearExt2() {
-            PrepareBuilder();
-            result.ext2_.Clear();
-            return this;
-          }
-        }
-        static RepeatedFieldsGenerator() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class OptionalGroup : pb::GeneratedMessage<OptionalGroup, OptionalGroup.Builder> {
-        private OptionalGroup() { }
-        private static readonly OptionalGroup defaultInstance = new OptionalGroup().MakeReadOnly();
-        private static readonly string[] _optionalGroupFieldNames = new string[] { "optional_group_all_types" };
-        private static readonly uint[] _optionalGroupFieldTags = new uint[] { 90 };
-        public static OptionalGroup DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override OptionalGroup DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override OptionalGroup ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_OptionalGroup__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup, OptionalGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_OptionalGroup__FieldAccessorTable; }
-        }
-
-        public const int OptionalGroupAllTypesFieldNumber = 11;
-        private bool hasOptionalGroupAllTypes;
-        private global::Google.ProtocolBuffers.TestProtos.TestAllTypes optionalGroupAllTypes_;
-        public bool HasOptionalGroupAllTypes {
-          get { return hasOptionalGroupAllTypes; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestAllTypes OptionalGroupAllTypes {
-          get { return optionalGroupAllTypes_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _optionalGroupFieldNames;
-          if (hasOptionalGroupAllTypes) {
-            output.WriteMessage(11, field_names[0], OptionalGroupAllTypes);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasOptionalGroupAllTypes) {
-            size += pb::CodedOutputStream.ComputeMessageSize(11, OptionalGroupAllTypes);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static OptionalGroup ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static OptionalGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private OptionalGroup MakeReadOnly() {
-          return this;
-        }
-
-        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(OptionalGroup prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(OptionalGroup cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private OptionalGroup result;
-
-          private OptionalGroup PrepareBuilder() {
-            if (resultIsReadOnly) {
-              OptionalGroup original = result;
-              result = new OptionalGroup();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override OptionalGroup MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.Descriptor; }
-          }
-
-          public override OptionalGroup DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.DefaultInstance; }
-          }
-
-          public override OptionalGroup BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is OptionalGroup) {
-              return MergeFrom((OptionalGroup) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(OptionalGroup other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasOptionalGroupAllTypes) {
-              MergeOptionalGroupAllTypes(other.OptionalGroupAllTypes);
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_optionalGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _optionalGroupFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 90: {
-                  global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-                  if (result.hasOptionalGroupAllTypes) {
-                    subBuilder.MergeFrom(OptionalGroupAllTypes);
-                  }
-                  input.ReadMessage(subBuilder, extensionRegistry);
-                  OptionalGroupAllTypes = subBuilder.BuildPartial();
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasOptionalGroupAllTypes {
-           get { return result.hasOptionalGroupAllTypes; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestAllTypes OptionalGroupAllTypes {
-            get { return result.OptionalGroupAllTypes; }
-            set { SetOptionalGroupAllTypes(value); }
-          }
-          public Builder SetOptionalGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasOptionalGroupAllTypes = true;
-            result.optionalGroupAllTypes_ = value;
-            return this;
-          }
-          public Builder SetOptionalGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.hasOptionalGroupAllTypes = true;
-            result.optionalGroupAllTypes_ = builderForValue.Build();
-            return this;
-          }
-          public Builder MergeOptionalGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            if (result.hasOptionalGroupAllTypes &&
-                result.optionalGroupAllTypes_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-                result.optionalGroupAllTypes_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.optionalGroupAllTypes_).MergeFrom(value).BuildPartial();
-            } else {
-              result.optionalGroupAllTypes_ = value;
-            }
-            result.hasOptionalGroupAllTypes = true;
-            return this;
-          }
-          public Builder ClearOptionalGroupAllTypes() {
-            PrepareBuilder();
-            result.hasOptionalGroupAllTypes = false;
-            result.optionalGroupAllTypes_ = null;
-            return this;
-          }
-        }
-        static OptionalGroup() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class RepeatedGroup : pb::GeneratedMessage<RepeatedGroup, RepeatedGroup.Builder> {
-        private RepeatedGroup() { }
-        private static readonly RepeatedGroup defaultInstance = new RepeatedGroup().MakeReadOnly();
-        private static readonly string[] _repeatedGroupFieldNames = new string[] { "repeated_group_all_types" };
-        private static readonly uint[] _repeatedGroupFieldTags = new uint[] { 170 };
-        public static RepeatedGroup DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override RepeatedGroup DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override RepeatedGroup ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_RepeatedGroup__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup, RepeatedGroup.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestParsingMerge_RepeatedGroup__FieldAccessorTable; }
-        }
-
-        public const int RepeatedGroupAllTypesFieldNumber = 21;
-        private bool hasRepeatedGroupAllTypes;
-        private global::Google.ProtocolBuffers.TestProtos.TestAllTypes repeatedGroupAllTypes_;
-        public bool HasRepeatedGroupAllTypes {
-          get { return hasRepeatedGroupAllTypes; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.TestAllTypes RepeatedGroupAllTypes {
-          get { return repeatedGroupAllTypes_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _repeatedGroupFieldNames;
-          if (hasRepeatedGroupAllTypes) {
-            output.WriteMessage(21, field_names[0], RepeatedGroupAllTypes);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasRepeatedGroupAllTypes) {
-            size += pb::CodedOutputStream.ComputeMessageSize(21, RepeatedGroupAllTypes);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static RepeatedGroup ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private RepeatedGroup MakeReadOnly() {
-          return this;
-        }
-
-        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(RepeatedGroup prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(RepeatedGroup cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private RepeatedGroup result;
-
-          private RepeatedGroup PrepareBuilder() {
-            if (resultIsReadOnly) {
-              RepeatedGroup original = result;
-              result = new RepeatedGroup();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override RepeatedGroup MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup.Descriptor; }
-          }
-
-          public override RepeatedGroup DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup.DefaultInstance; }
-          }
-
-          public override RepeatedGroup BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is RepeatedGroup) {
-              return MergeFrom((RepeatedGroup) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(RepeatedGroup other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasRepeatedGroupAllTypes) {
-              MergeRepeatedGroupAllTypes(other.RepeatedGroupAllTypes);
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _repeatedGroupFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 170: {
-                  global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-                  if (result.hasRepeatedGroupAllTypes) {
-                    subBuilder.MergeFrom(RepeatedGroupAllTypes);
-                  }
-                  input.ReadMessage(subBuilder, extensionRegistry);
-                  RepeatedGroupAllTypes = subBuilder.BuildPartial();
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasRepeatedGroupAllTypes {
-           get { return result.hasRepeatedGroupAllTypes; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.TestAllTypes RepeatedGroupAllTypes {
-            get { return result.RepeatedGroupAllTypes; }
-            set { SetRepeatedGroupAllTypes(value); }
-          }
-          public Builder SetRepeatedGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasRepeatedGroupAllTypes = true;
-            result.repeatedGroupAllTypes_ = value;
-            return this;
-          }
-          public Builder SetRepeatedGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-            PrepareBuilder();
-            result.hasRepeatedGroupAllTypes = true;
-            result.repeatedGroupAllTypes_ = builderForValue.Build();
-            return this;
-          }
-          public Builder MergeRepeatedGroupAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            if (result.hasRepeatedGroupAllTypes &&
-                result.repeatedGroupAllTypes_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-                result.repeatedGroupAllTypes_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.repeatedGroupAllTypes_).MergeFrom(value).BuildPartial();
-            } else {
-              result.repeatedGroupAllTypes_ = value;
-            }
-            result.hasRepeatedGroupAllTypes = true;
-            return this;
-          }
-          public Builder ClearRepeatedGroupAllTypes() {
-            PrepareBuilder();
-            result.hasRepeatedGroupAllTypes = false;
-            result.repeatedGroupAllTypes_ = null;
-            return this;
-          }
-        }
-        static RepeatedGroup() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int RequiredAllTypesFieldNumber = 1;
-    private bool hasRequiredAllTypes;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes requiredAllTypes_;
-    public bool HasRequiredAllTypes {
-      get { return hasRequiredAllTypes; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes RequiredAllTypes {
-      get { return requiredAllTypes_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-    }
-
-    public const int OptionalAllTypesFieldNumber = 2;
-    private bool hasOptionalAllTypes;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes optionalAllTypes_;
-    public bool HasOptionalAllTypes {
-      get { return hasOptionalAllTypes; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes OptionalAllTypes {
-      get { return optionalAllTypes_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-    }
-
-    public const int RepeatedAllTypesFieldNumber = 3;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> repeatedAllTypes_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> RepeatedAllTypesList {
-      get { return repeatedAllTypes_; }
-    }
-    public int RepeatedAllTypesCount {
-      get { return repeatedAllTypes_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetRepeatedAllTypes(int index) {
-      return repeatedAllTypes_[index];
-    }
-
-    public const int OptionalGroupFieldNumber = 10;
-    private bool hasOptionalGroup;
-    private global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup optionalGroup_;
-    public bool HasOptionalGroup {
-      get { return hasOptionalGroup; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup OptionalGroup {
-      get { return optionalGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.DefaultInstance; }
-    }
-
-    public const int RepeatedGroupFieldNumber = 20;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup> repeatedGroup_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup> RepeatedGroupList {
-      get { return repeatedGroup_; }
-    }
-    public int RepeatedGroupCount {
-      get { return repeatedGroup_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup GetRepeatedGroup(int index) {
-      return repeatedGroup_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!hasRequiredAllTypes) return false;
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testParsingMergeFieldNames;
-      pb::ExtendableMessage<TestParsingMerge, TestParsingMerge.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (hasRequiredAllTypes) {
-        output.WriteMessage(1, field_names[4], RequiredAllTypes);
-      }
-      if (hasOptionalAllTypes) {
-        output.WriteMessage(2, field_names[0], OptionalAllTypes);
-      }
-      if (repeatedAllTypes_.Count > 0) {
-        output.WriteMessageArray(3, field_names[2], repeatedAllTypes_);
-      }
-      if (hasOptionalGroup) {
-        output.WriteGroup(10, field_names[1], OptionalGroup);
-      }
-      if (repeatedGroup_.Count > 0) {
-        output.WriteGroupArray(20, field_names[3], repeatedGroup_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasRequiredAllTypes) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, RequiredAllTypes);
-      }
-      if (hasOptionalAllTypes) {
-        size += pb::CodedOutputStream.ComputeMessageSize(2, OptionalAllTypes);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes element in RepeatedAllTypesList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(3, element);
-      }
-      if (hasOptionalGroup) {
-        size += pb::CodedOutputStream.ComputeGroupSize(10, OptionalGroup);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup element in RepeatedGroupList) {
-        size += pb::CodedOutputStream.ComputeGroupSize(20, element);
-      }
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestParsingMerge ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestParsingMerge ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestParsingMerge ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestParsingMerge ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestParsingMerge ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestParsingMerge ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestParsingMerge ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestParsingMerge ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestParsingMerge ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestParsingMerge ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestParsingMerge MakeReadOnly() {
-      repeatedAllTypes_.MakeReadOnly();
-      repeatedGroup_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestParsingMerge prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestParsingMerge, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestParsingMerge cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestParsingMerge result;
-
-      private TestParsingMerge PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestParsingMerge original = result;
-          result = new TestParsingMerge();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestParsingMerge MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Descriptor; }
-      }
-
-      public override TestParsingMerge DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.DefaultInstance; }
-      }
-
-      public override TestParsingMerge BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestParsingMerge) {
-          return MergeFrom((TestParsingMerge) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestParsingMerge other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasRequiredAllTypes) {
-          MergeRequiredAllTypes(other.RequiredAllTypes);
-        }
-        if (other.HasOptionalAllTypes) {
-          MergeOptionalAllTypes(other.OptionalAllTypes);
-        }
-        if (other.repeatedAllTypes_.Count != 0) {
-          result.repeatedAllTypes_.Add(other.repeatedAllTypes_);
-        }
-        if (other.HasOptionalGroup) {
-          MergeOptionalGroup(other.OptionalGroup);
-        }
-        if (other.repeatedGroup_.Count != 0) {
-          result.repeatedGroup_.Add(other.repeatedGroup_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testParsingMergeFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testParsingMergeFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-              if (result.hasRequiredAllTypes) {
-                subBuilder.MergeFrom(RequiredAllTypes);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              RequiredAllTypes = subBuilder.BuildPartial();
-              break;
-            }
-            case 18: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-              if (result.hasOptionalAllTypes) {
-                subBuilder.MergeFrom(OptionalAllTypes);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalAllTypes = subBuilder.BuildPartial();
-              break;
-            }
-            case 26: {
-              input.ReadMessageArray(tag, field_name, result.repeatedAllTypes_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 83: {
-              global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.CreateBuilder();
-              if (result.hasOptionalGroup) {
-                subBuilder.MergeFrom(OptionalGroup);
-              }
-              input.ReadGroup(10, subBuilder, extensionRegistry);
-              OptionalGroup = subBuilder.BuildPartial();
-              break;
-            }
-            case 163: {
-              input.ReadGroupArray(tag, field_name, result.repeatedGroup_, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasRequiredAllTypes {
-       get { return result.hasRequiredAllTypes; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes RequiredAllTypes {
-        get { return result.RequiredAllTypes; }
-        set { SetRequiredAllTypes(value); }
-      }
-      public Builder SetRequiredAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasRequiredAllTypes = true;
-        result.requiredAllTypes_ = value;
-        return this;
-      }
-      public Builder SetRequiredAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasRequiredAllTypes = true;
-        result.requiredAllTypes_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeRequiredAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasRequiredAllTypes &&
-            result.requiredAllTypes_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-            result.requiredAllTypes_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.requiredAllTypes_).MergeFrom(value).BuildPartial();
-        } else {
-          result.requiredAllTypes_ = value;
-        }
-        result.hasRequiredAllTypes = true;
-        return this;
-      }
-      public Builder ClearRequiredAllTypes() {
-        PrepareBuilder();
-        result.hasRequiredAllTypes = false;
-        result.requiredAllTypes_ = null;
-        return this;
-      }
-
-      public bool HasOptionalAllTypes {
-       get { return result.hasOptionalAllTypes; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes OptionalAllTypes {
-        get { return result.OptionalAllTypes; }
-        set { SetOptionalAllTypes(value); }
-      }
-      public Builder SetOptionalAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalAllTypes = true;
-        result.optionalAllTypes_ = value;
-        return this;
-      }
-      public Builder SetOptionalAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalAllTypes = true;
-        result.optionalAllTypes_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalAllTypes &&
-            result.optionalAllTypes_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-            result.optionalAllTypes_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.optionalAllTypes_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalAllTypes_ = value;
-        }
-        result.hasOptionalAllTypes = true;
-        return this;
-      }
-      public Builder ClearOptionalAllTypes() {
-        PrepareBuilder();
-        result.hasOptionalAllTypes = false;
-        result.optionalAllTypes_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> RepeatedAllTypesList {
-        get { return PrepareBuilder().repeatedAllTypes_; }
-      }
-      public int RepeatedAllTypesCount {
-        get { return result.RepeatedAllTypesCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetRepeatedAllTypes(int index) {
-        return result.GetRepeatedAllTypes(index);
-      }
-      public Builder SetRepeatedAllTypes(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedAllTypes_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedAllTypes(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedAllTypes_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedAllTypes_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedAllTypes(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedAllTypes_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedAllTypes(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> values) {
-        PrepareBuilder();
-        result.repeatedAllTypes_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedAllTypes() {
-        PrepareBuilder();
-        result.repeatedAllTypes_.Clear();
-        return this;
-      }
-
-      public bool HasOptionalGroup {
-       get { return result.hasOptionalGroup; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup OptionalGroup {
-        get { return result.OptionalGroup; }
-        set { SetOptionalGroup(value); }
-      }
-      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalGroup = true;
-        result.optionalGroup_ = value;
-        return this;
-      }
-      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalGroup = true;
-        result.optionalGroup_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalGroup &&
-            result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.DefaultInstance) {
-            result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalGroup_ = value;
-        }
-        result.hasOptionalGroup = true;
-        return this;
-      }
-      public Builder ClearOptionalGroup() {
-        PrepareBuilder();
-        result.hasOptionalGroup = false;
-        result.optionalGroup_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup> RepeatedGroupList {
-        get { return PrepareBuilder().repeatedGroup_; }
-      }
-      public int RepeatedGroupCount {
-        get { return result.RepeatedGroupCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup GetRepeatedGroup(int index) {
-        return result.GetRepeatedGroup(index);
-      }
-      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedGroup_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedGroup_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedGroup_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedGroup_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedGroup(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestParsingMerge.Types.RepeatedGroup> values) {
-        PrepareBuilder();
-        result.repeatedGroup_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedGroup() {
-        PrepareBuilder();
-        result.repeatedGroup_.Clear();
-        return this;
-      }
-    }
-    static TestParsingMerge() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestCommentInjectionMessage : pb::GeneratedMessage<TestCommentInjectionMessage, TestCommentInjectionMessage.Builder> {
-    private TestCommentInjectionMessage() { }
-    private static readonly TestCommentInjectionMessage defaultInstance = new TestCommentInjectionMessage().MakeReadOnly();
-    private static readonly string[] _testCommentInjectionMessageFieldNames = new string[] { "a" };
-    private static readonly uint[] _testCommentInjectionMessageFieldTags = new uint[] { 10 };
-    public static TestCommentInjectionMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestCommentInjectionMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestCommentInjectionMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestCommentInjectionMessage, TestCommentInjectionMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable; }
-    }
-
-    public const int AFieldNumber = 1;
-    private bool hasA;
-    private string a_ = "*/ <- Neither should this.";
-    public bool HasA {
-      get { return hasA; }
-    }
-    public string A {
-      get { return a_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testCommentInjectionMessageFieldNames;
-      if (hasA) {
-        output.WriteString(1, field_names[0], A);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasA) {
-        size += pb::CodedOutputStream.ComputeStringSize(1, A);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestCommentInjectionMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestCommentInjectionMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestCommentInjectionMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(TestCommentInjectionMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestCommentInjectionMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestCommentInjectionMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestCommentInjectionMessage result;
-
-      private TestCommentInjectionMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestCommentInjectionMessage original = result;
-          result = new TestCommentInjectionMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestCommentInjectionMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestCommentInjectionMessage.Descriptor; }
-      }
-
-      public override TestCommentInjectionMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestCommentInjectionMessage.DefaultInstance; }
-      }
-
-      public override TestCommentInjectionMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestCommentInjectionMessage) {
-          return MergeFrom((TestCommentInjectionMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestCommentInjectionMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestCommentInjectionMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasA) {
-          A = other.A;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testCommentInjectionMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testCommentInjectionMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              result.hasA = input.ReadString(ref result.a_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasA {
-        get { return result.hasA; }
-      }
-      public string A {
-        get { return result.A; }
-        set { SetA(value); }
-      }
-      public Builder SetA(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasA = true;
-        result.a_ = value;
-        return this;
-      }
-      public Builder ClearA() {
-        PrepareBuilder();
-        result.hasA = false;
-        result.a_ = "*/ <- Neither should this.";
-        return this;
-      }
-    }
-    static TestCommentInjectionMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class FooRequest : pb::GeneratedMessage<FooRequest, FooRequest.Builder> {
-    private FooRequest() { }
-    private static readonly FooRequest defaultInstance = new FooRequest().MakeReadOnly();
-    private static readonly string[] _fooRequestFieldNames = new string[] {  };
-    private static readonly uint[] _fooRequestFieldTags = new uint[] {  };
-    public static FooRequest DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override FooRequest DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override FooRequest ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_FooRequest__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<FooRequest, FooRequest.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_FooRequest__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _fooRequestFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static FooRequest ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooRequest ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooRequest ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FooRequest ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FooRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FooRequest ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FooRequest MakeReadOnly() {
-      return this;
-    }
-
-    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(FooRequest prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<FooRequest, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FooRequest cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private FooRequest result;
-
-      private FooRequest PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FooRequest original = result;
-          result = new FooRequest();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override FooRequest MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooRequest.Descriptor; }
-      }
-
-      public override FooRequest DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance; }
-      }
-
-      public override FooRequest BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FooRequest) {
-          return MergeFrom((FooRequest) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(FooRequest other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fooRequestFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fooRequestFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static FooRequest() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class FooResponse : pb::GeneratedMessage<FooResponse, FooResponse.Builder> {
-    private FooResponse() { }
-    private static readonly FooResponse defaultInstance = new FooResponse().MakeReadOnly();
-    private static readonly string[] _fooResponseFieldNames = new string[] {  };
-    private static readonly uint[] _fooResponseFieldTags = new uint[] {  };
-    public static FooResponse DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override FooResponse DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override FooResponse ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_FooResponse__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<FooResponse, FooResponse.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_FooResponse__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _fooResponseFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static FooResponse ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooResponse ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooResponse ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FooResponse ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FooResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FooResponse ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FooResponse MakeReadOnly() {
-      return this;
-    }
-
-    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(FooResponse prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<FooResponse, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FooResponse cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private FooResponse result;
-
-      private FooResponse PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FooResponse original = result;
-          result = new FooResponse();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override FooResponse MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooResponse.Descriptor; }
-      }
-
-      public override FooResponse DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance; }
-      }
-
-      public override FooResponse BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FooResponse) {
-          return MergeFrom((FooResponse) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(FooResponse other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fooResponseFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fooResponseFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static FooResponse() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class FooClientMessage : pb::GeneratedMessage<FooClientMessage, FooClientMessage.Builder> {
-    private FooClientMessage() { }
-    private static readonly FooClientMessage defaultInstance = new FooClientMessage().MakeReadOnly();
-    private static readonly string[] _fooClientMessageFieldNames = new string[] {  };
-    private static readonly uint[] _fooClientMessageFieldTags = new uint[] {  };
-    public static FooClientMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override FooClientMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override FooClientMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_FooClientMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<FooClientMessage, FooClientMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _fooClientMessageFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static FooClientMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooClientMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooClientMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooClientMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooClientMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooClientMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FooClientMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FooClientMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FooClientMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooClientMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FooClientMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(FooClientMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<FooClientMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FooClientMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private FooClientMessage result;
-
-      private FooClientMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FooClientMessage original = result;
-          result = new FooClientMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override FooClientMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooClientMessage.Descriptor; }
-      }
-
-      public override FooClientMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooClientMessage.DefaultInstance; }
-      }
-
-      public override FooClientMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FooClientMessage) {
-          return MergeFrom((FooClientMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(FooClientMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.FooClientMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fooClientMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fooClientMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static FooClientMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class FooServerMessage : pb::GeneratedMessage<FooServerMessage, FooServerMessage.Builder> {
-    private FooServerMessage() { }
-    private static readonly FooServerMessage defaultInstance = new FooServerMessage().MakeReadOnly();
-    private static readonly string[] _fooServerMessageFieldNames = new string[] {  };
-    private static readonly uint[] _fooServerMessageFieldTags = new uint[] {  };
-    public static FooServerMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override FooServerMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override FooServerMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_FooServerMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<FooServerMessage, FooServerMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _fooServerMessageFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static FooServerMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooServerMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooServerMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooServerMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooServerMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooServerMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FooServerMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FooServerMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FooServerMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooServerMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FooServerMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(FooServerMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<FooServerMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FooServerMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private FooServerMessage result;
-
-      private FooServerMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FooServerMessage original = result;
-          result = new FooServerMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override FooServerMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooServerMessage.Descriptor; }
-      }
-
-      public override FooServerMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooServerMessage.DefaultInstance; }
-      }
-
-      public override FooServerMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FooServerMessage) {
-          return MergeFrom((FooServerMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(FooServerMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.FooServerMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fooServerMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fooServerMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static FooServerMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class BarRequest : pb::GeneratedMessage<BarRequest, BarRequest.Builder> {
-    private BarRequest() { }
-    private static readonly BarRequest defaultInstance = new BarRequest().MakeReadOnly();
-    private static readonly string[] _barRequestFieldNames = new string[] {  };
-    private static readonly uint[] _barRequestFieldTags = new uint[] {  };
-    public static BarRequest DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override BarRequest DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override BarRequest ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_BarRequest__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<BarRequest, BarRequest.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_BarRequest__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _barRequestFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static BarRequest ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static BarRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static BarRequest ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static BarRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static BarRequest ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static BarRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static BarRequest ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static BarRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static BarRequest ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static BarRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private BarRequest MakeReadOnly() {
-      return this;
-    }
-
-    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(BarRequest prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<BarRequest, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(BarRequest cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private BarRequest result;
-
-      private BarRequest PrepareBuilder() {
-        if (resultIsReadOnly) {
-          BarRequest original = result;
-          result = new BarRequest();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override BarRequest MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.BarRequest.Descriptor; }
-      }
-
-      public override BarRequest DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance; }
-      }
-
-      public override BarRequest BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is BarRequest) {
-          return MergeFrom((BarRequest) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(BarRequest other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_barRequestFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _barRequestFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static BarRequest() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class BarResponse : pb::GeneratedMessage<BarResponse, BarResponse.Builder> {
-    private BarResponse() { }
-    private static readonly BarResponse defaultInstance = new BarResponse().MakeReadOnly();
-    private static readonly string[] _barResponseFieldNames = new string[] {  };
-    private static readonly uint[] _barResponseFieldTags = new uint[] {  };
-    public static BarResponse DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override BarResponse DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override BarResponse ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_BarResponse__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<BarResponse, BarResponse.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Unittest.internal__static_protobuf_unittest_BarResponse__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _barResponseFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static BarResponse ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static BarResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static BarResponse ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static BarResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static BarResponse ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static BarResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static BarResponse ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static BarResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static BarResponse ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static BarResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private BarResponse MakeReadOnly() {
-      return this;
-    }
-
-    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(BarResponse prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<BarResponse, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(BarResponse cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private BarResponse result;
-
-      private BarResponse PrepareBuilder() {
-        if (resultIsReadOnly) {
-          BarResponse original = result;
-          result = new BarResponse();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override BarResponse MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.BarResponse.Descriptor; }
-      }
-
-      public override BarResponse DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance; }
-      }
-
-      public override BarResponse BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is BarResponse) {
-          return MergeFrom((BarResponse) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(BarResponse other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_barResponseFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _barResponseFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static BarResponse() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 0 - 7543
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestCustomOptions.cs

@@ -1,7543 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unittest_custom_options.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnittestCustomOptions {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.FileOpt1);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.MessageOpt1);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.FieldOpt1);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.FieldOpt2);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.EnumOpt1);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.EnumValueOpt1);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ServiceOpt1);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.MethodOpt1);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.BoolOpt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Int32Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Int64Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Uint32Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Uint64Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Sint32Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Sint64Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Fixed32Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Fixed64Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Sfixed32Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Sfixed64Opt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.FloatOpt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.DoubleOpt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.StringOpt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.BytesOpt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.EnumOpt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.MessageTypeOpt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Quux);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Corge);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Grault);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Garply);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ComplexOpt1);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ComplexOpt2);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ComplexOpt3);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ComplexOpt6);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Fileopt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Msgopt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Fieldopt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Enumopt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Enumvalopt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Serviceopt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Methodopt);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.ComplexOpt4);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.MessageSetExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.Aggregate.Nested);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.NestedOptionType.NestedExtension);
-    }
-    #endregion
-    #region Extensions
-    public const int FileOpt1FieldNumber = 7736974;
-    public static pb::GeneratedExtensionBase<ulong> FileOpt1;
-    public const int MessageOpt1FieldNumber = 7739036;
-    public static pb::GeneratedExtensionBase<int> MessageOpt1;
-    public const int FieldOpt1FieldNumber = 7740936;
-    public static pb::GeneratedExtensionBase<ulong> FieldOpt1;
-    public const int FieldOpt2FieldNumber = 7753913;
-    public static pb::GeneratedExtensionBase<int> FieldOpt2;
-    public const int EnumOpt1FieldNumber = 7753576;
-    public static pb::GeneratedExtensionBase<int> EnumOpt1;
-    public const int EnumValueOpt1FieldNumber = 1560678;
-    public static pb::GeneratedExtensionBase<int> EnumValueOpt1;
-    public const int ServiceOpt1FieldNumber = 7887650;
-    public static pb::GeneratedExtensionBase<long> ServiceOpt1;
-    public const int MethodOpt1FieldNumber = 7890860;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.MethodOpt1> MethodOpt1;
-    public const int BoolOptFieldNumber = 7706090;
-    public static pb::GeneratedExtensionBase<bool> BoolOpt;
-    public const int Int32OptFieldNumber = 7705709;
-    public static pb::GeneratedExtensionBase<int> Int32Opt;
-    public const int Int64OptFieldNumber = 7705542;
-    public static pb::GeneratedExtensionBase<long> Int64Opt;
-    public const int Uint32OptFieldNumber = 7704880;
-    public static pb::GeneratedExtensionBase<uint> Uint32Opt;
-    public const int Uint64OptFieldNumber = 7702367;
-    public static pb::GeneratedExtensionBase<ulong> Uint64Opt;
-    public const int Sint32OptFieldNumber = 7701568;
-    public static pb::GeneratedExtensionBase<int> Sint32Opt;
-    public const int Sint64OptFieldNumber = 7700863;
-    public static pb::GeneratedExtensionBase<long> Sint64Opt;
-    public const int Fixed32OptFieldNumber = 7700307;
-    public static pb::GeneratedExtensionBase<uint> Fixed32Opt;
-    public const int Fixed64OptFieldNumber = 7700194;
-    public static pb::GeneratedExtensionBase<ulong> Fixed64Opt;
-    public const int Sfixed32OptFieldNumber = 7698645;
-    public static pb::GeneratedExtensionBase<int> Sfixed32Opt;
-    public const int Sfixed64OptFieldNumber = 7685475;
-    public static pb::GeneratedExtensionBase<long> Sfixed64Opt;
-    public const int FloatOptFieldNumber = 7675390;
-    public static pb::GeneratedExtensionBase<float> FloatOpt;
-    public const int DoubleOptFieldNumber = 7673293;
-    public static pb::GeneratedExtensionBase<double> DoubleOpt;
-    public const int StringOptFieldNumber = 7673285;
-    public static pb::GeneratedExtensionBase<string> StringOpt;
-    public const int BytesOptFieldNumber = 7673238;
-    public static pb::GeneratedExtensionBase<pb::ByteString> BytesOpt;
-    public const int EnumOptFieldNumber = 7673233;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Types.TestEnumType> EnumOpt;
-    public const int MessageTypeOptFieldNumber = 7665967;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType> MessageTypeOpt;
-    public const int QuuxFieldNumber = 7663707;
-    public static pb::GeneratedExtensionBase<int> Quux;
-    public const int CorgeFieldNumber = 7663442;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3> Corge;
-    public const int GraultFieldNumber = 7650927;
-    public static pb::GeneratedExtensionBase<int> Grault;
-    public const int GarplyFieldNumber = 7649992;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1> Garply;
-    public const int ComplexOpt1FieldNumber = 7646756;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1> ComplexOpt1;
-    public const int ComplexOpt2FieldNumber = 7636949;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2> ComplexOpt2;
-    public const int ComplexOpt3FieldNumber = 7636463;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3> ComplexOpt3;
-    public const int ComplexOpt6FieldNumber = 7595468;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOpt6> ComplexOpt6;
-    public const int FileoptFieldNumber = 15478479;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Fileopt;
-    public const int MsgoptFieldNumber = 15480088;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Msgopt;
-    public const int FieldoptFieldNumber = 15481374;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Fieldopt;
-    public const int EnumoptFieldNumber = 15483218;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Enumopt;
-    public const int EnumvaloptFieldNumber = 15486921;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Enumvalopt;
-    public const int ServiceoptFieldNumber = 15497145;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Serviceopt;
-    public const int MethodoptFieldNumber = 15512713;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Methodopt;
-    #endregion
-
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageWithCustomOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions, global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.Builder> internal__static_protobuf_unittest_TestMessageWithCustomOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionFooRequest__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.Builder> internal__static_protobuf_unittest_CustomOptionFooRequest__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionFooResponse__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.Builder> internal__static_protobuf_unittest_CustomOptionFooResponse__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionFooClientMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooClientMessage, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooClientMessage.Builder> internal__static_protobuf_unittest_CustomOptionFooClientMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionFooServerMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooServerMessage, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooServerMessage.Builder> internal__static_protobuf_unittest_CustomOptionFooServerMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_DummyMessageContainingEnum__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum, global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Builder> internal__static_protobuf_unittest_DummyMessageContainingEnum__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType, global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.Builder> internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionMinIntegerValues__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.Builder> internal__static_protobuf_unittest_CustomOptionMinIntegerValues__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.Builder> internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionOtherValues__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.Builder> internal__static_protobuf_unittest_CustomOptionOtherValues__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SettingRealsFromPositiveInts__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts, global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.Builder> internal__static_protobuf_unittest_SettingRealsFromPositiveInts__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SettingRealsFromNegativeInts__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts, global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.Builder> internal__static_protobuf_unittest_SettingRealsFromNegativeInts__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType1__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder> internal__static_protobuf_unittest_ComplexOptionType1__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType2__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Builder> internal__static_protobuf_unittest_ComplexOptionType2__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder> internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType3__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Builder> internal__static_protobuf_unittest_ComplexOptionType3__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder> internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOpt6__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOpt6, global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.Builder> internal__static_protobuf_unittest_ComplexOpt6__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_VariousComplexOptions__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions, global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.Builder> internal__static_protobuf_unittest_VariousComplexOptions__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_AggregateMessageSet__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet, global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Builder> internal__static_protobuf_unittest_AggregateMessageSet__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_AggregateMessageSetElement__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement, global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.Builder> internal__static_protobuf_unittest_AggregateMessageSetElement__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Aggregate__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Aggregate, global::Google.ProtocolBuffers.TestProtos.Aggregate.Builder> internal__static_protobuf_unittest_Aggregate__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_AggregateMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessage, global::Google.ProtocolBuffers.TestProtos.AggregateMessage.Builder> internal__static_protobuf_unittest_AggregateMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_NestedOptionType__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.NestedOptionType, global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Builder> internal__static_protobuf_unittest_NestedOptionType__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_NestedOptionType_NestedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Types.NestedMessage.Builder> internal__static_protobuf_unittest_NestedOptionType_NestedMessage__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnittestCustomOptions() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "Ci1nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJv", 
-            "dG8SEXByb3RvYnVmX3VuaXR0ZXN0GiBnb29nbGUvcHJvdG9idWYvZGVzY3Jp", 
-            "cHRvci5wcm90byKNAQocVGVzdE1lc3NhZ2VXaXRoQ3VzdG9tT3B0aW9ucxIe", 
-            "CgZmaWVsZDEYASABKAlCDggBweDDHS3hdQoCAAAAIjsKBkFuRW51bRIPCgtB", 
-            "TkVOVU1fVkFMMRABEhYKC0FORU5VTV9WQUwyEAIaBbCG+gV7GgjF9skd6/z/", 
-            "/zoQCADg6cIdyP//////////ASIYChZDdXN0b21PcHRpb25Gb29SZXF1ZXN0", 
-            "IhkKF0N1c3RvbU9wdGlvbkZvb1Jlc3BvbnNlIh4KHEN1c3RvbU9wdGlvbkZv", 
-            "b0NsaWVudE1lc3NhZ2UiHgocQ3VzdG9tT3B0aW9uRm9vU2VydmVyTWVzc2Fn", 
-            "ZSJtChpEdW1teU1lc3NhZ2VDb250YWluaW5nRW51bSJPCgxUZXN0RW51bVR5", 
-            "cGUSGgoWVEVTVF9PUFRJT05fRU5VTV9UWVBFMRAWEiMKFlRFU1RfT1BUSU9O", 
-            "X0VOVU1fVFlQRTIQ6f//////////ASIhCh9EdW1teU1lc3NhZ2VJbnZhbGlk", 
-            "QXNPcHRpb25UeXBlIooBChxDdXN0b21PcHRpb25NaW5JbnRlZ2VyVmFsdWVz", 
-            "OmrQ3rIdAOjGsh2AgICA+P////8BsLyyHYCAgICAgICAgAGAk7IdAPj1sB0A", 
-            "gMSwHf////8P+JewHf///////////wGd9a8dAAAAAJHurx0AAAAAAAAAAK2N", 
-            "rx0AAACAmdaoHQAAAAAAAACAIpEBChxDdXN0b21PcHRpb25NYXhJbnRlZ2Vy", 
-            "VmFsdWVzOnHQ3rIdAejGsh3/////B7C8sh3//////////3+Ak7Id/////w/4", 
-            "9bAd////////////AYDEsB3+////D/iXsB3+//////////8BnfWvHf////+R", 
-            "7q8d//////////+tja8d////f5nWqB3/////////fyJuChdDdXN0b21PcHRp", 
-            "b25PdGhlclZhbHVlczpT6MayHZz//////////wH136Md54dFQencoh37WYxC", 
-            "ysDzP6rcoh0OSGVsbG8sICJXb3JsZCKy2aIdC0hlbGxvAFdvcmxkiNmiHen/", 
-            "/////////wEiNAocU2V0dGluZ1JlYWxzRnJvbVBvc2l0aXZlSW50czoU9d+j", 
-            "HQAAQEHp3KIdAAAAAABAY0AiNAocU2V0dGluZ1JlYWxzRnJvbU5lZ2F0aXZl", 
-            "SW50czoU9d+jHQAAQMHp3KIdAAAAAABAY8AiVQoSQ29tcGxleE9wdGlvblR5", 
-            "cGUxEgsKA2ZvbxgBIAEoBRIMCgRmb28yGAIgASgFEgwKBGZvbzMYAyABKAUS", 
-            "DAoEZm9vNBgEIAMoBSoICGQQgICAgAIiiwMKEkNvbXBsZXhPcHRpb25UeXBl", 
-            "MhIyCgNiYXIYASABKAsyJS5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0", 
-            "aW9uVHlwZTESCwoDYmF6GAIgASgFEkYKBGZyZWQYAyABKAsyOC5wcm90b2J1", 
-            "Zl91bml0dGVzdC5Db21wbGV4T3B0aW9uVHlwZTIuQ29tcGxleE9wdGlvblR5", 
-            "cGU0EkgKBmJhcm5leRgEIAMoCzI4LnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBs", 
-            "ZXhPcHRpb25UeXBlMi5Db21wbGV4T3B0aW9uVHlwZTQalwEKEkNvbXBsZXhP", 
-            "cHRpb25UeXBlNBINCgV3YWxkbxgBIAEoBTJyCgxjb21wbGV4X29wdDQSHy5n", 
-            "b29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYivXRAyABKAsyOC5wcm90", 
-            "b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0aW9uVHlwZTIuQ29tcGxleE9wdGlv", 
-            "blR5cGU0KggIZBCAgICAAiKcAQoSQ29tcGxleE9wdGlvblR5cGUzEgsKA3F1", 
-            "eBgBIAEoBRJUChJjb21wbGV4b3B0aW9udHlwZTUYAiABKAoyOC5wcm90b2J1", 
-            "Zl91bml0dGVzdC5Db21wbGV4T3B0aW9uVHlwZTMuQ29tcGxleE9wdGlvblR5", 
-            "cGU1GiMKEkNvbXBsZXhPcHRpb25UeXBlNRINCgVwbHVnaBgDIAEoBSIfCgtD", 
-            "b21wbGV4T3B0NhIQCgV4eXp6eRjfv88DIAEoBSLxAQoVVmFyaW91c0NvbXBs", 
-            "ZXhPcHRpb25zOtcBouKVHQIIKqLilR0G2IWeHcQCouKVHQiS9Z0dAwjsBqLi", 
-            "lR0CIGOi4pUdAiBYqv2QHQMQ2weq/ZAdBvjmlx2OBar9kB0FCgMI5wWq/ZAd", 
-            "CAoG2IWeHc8Pqv2QHQoKCJL1nR0DCNgPqv2QHQjCrJcdAwjlBar9kB0LwqyX", 
-            "HQbYhZ4dzg+q/ZAdDcKslx0IkvWdHQMIyRDSqI8dAwizD6r9kB0FGgMIwQKq", 
-            "/ZAdBCICCGWq/ZAdBSIDCNQB+t6QHQIICfrekB0EExgWFOPc/Bz4/fscGOTc", 
-            "/BwiIwoTQWdncmVnYXRlTWVzc2FnZVNldCoICAQQ/////wc6AggBIqABChpB", 
-            "Z2dyZWdhdGVNZXNzYWdlU2V0RWxlbWVudBIJCgFzGAEgASgJMncKFW1lc3Nh", 
-            "Z2Vfc2V0X2V4dGVuc2lvbhImLnByb3RvYnVmX3VuaXR0ZXN0LkFnZ3JlZ2F0", 
-            "ZU1lc3NhZ2VTZXQY9uuuByABKAsyLS5wcm90b2J1Zl91bml0dGVzdC5BZ2dy", 
-            "ZWdhdGVNZXNzYWdlU2V0RWxlbWVudCL9AQoJQWdncmVnYXRlEgkKAWkYASAB", 
-            "KAUSCQoBcxgCIAEoCRIpCgNzdWIYAyABKAsyHC5wcm90b2J1Zl91bml0dGVz", 
-            "dC5BZ2dyZWdhdGUSKgoEZmlsZRgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5G", 
-            "aWxlT3B0aW9ucxI0CgRtc2V0GAUgASgLMiYucHJvdG9idWZfdW5pdHRlc3Qu", 
-            "QWdncmVnYXRlTWVzc2FnZVNldDJNCgZuZXN0ZWQSHC5nb29nbGUucHJvdG9i", 
-            "dWYuRmlsZU9wdGlvbnMYp9GwByABKAsyHC5wcm90b2J1Zl91bml0dGVzdC5B", 
-            "Z2dyZWdhdGUiWQoQQWdncmVnYXRlTWVzc2FnZRIpCglmaWVsZG5hbWUYASAB", 
-            "KAVCFvKhhzsREg9GaWVsZEFubm90YXRpb246GsLRhjsVCGUSEU1lc3NhZ2VB", 
-            "bm5vdGF0aW9uIskBChBOZXN0ZWRPcHRpb25UeXBlGjsKDU5lc3RlZE1lc3Nh", 
-            "Z2USIgoMbmVzdGVkX2ZpZWxkGAEgASgFQgzB4MMd6gMAAAAAAAA6BuDpwh3p", 
-            "ByI1CgpOZXN0ZWRFbnVtEh0KEU5FU1RFRF9FTlVNX1ZBTFVFEAEaBrCG+gXs", 
-            "BxoIxfbJHesDAAAyQQoQbmVzdGVkX2V4dGVuc2lvbhIcLmdvb2dsZS5wcm90", 
-            "b2J1Zi5GaWxlT3B0aW9ucxj9+OIDIAEoBUIGyIvKHe0HKjYKCk1ldGhvZE9w", 
-            "dDESEwoPTUVUSE9ET1BUMV9WQUwxEAESEwoPTUVUSE9ET1BUMV9WQUwyEAIq", 
-            "TQoNQWdncmVnYXRlRW51bRIlCgVWQUxVRRABGhrK/Ik7FRITRW51bVZhbHVl", 
-            "QW5ub3RhdGlvbhoVkpWIOxASDkVudW1Bbm5vdGF0aW9uMo4BChxUZXN0U2Vy", 
-            "dmljZVdpdGhDdXN0b21PcHRpb25zEmMKA0ZvbxIpLnByb3RvYnVmX3VuaXR0", 
-            "ZXN0LkN1c3RvbU9wdGlvbkZvb1JlcXVlc3QaKi5wcm90b2J1Zl91bml0dGVz", 
-            "dC5DdXN0b21PcHRpb25Gb29SZXNwb25zZSIF4PqMHgIaCZCyix7T24DLSTKZ", 
-            "AQoQQWdncmVnYXRlU2VydmljZRJrCgZNZXRob2QSIy5wcm90b2J1Zl91bml0", 
-            "dGVzdC5BZ2dyZWdhdGVNZXNzYWdlGiMucHJvdG9idWZfdW5pdHRlc3QuQWdn", 
-            "cmVnYXRlTWVzc2FnZSIXysiWOxISEE1ldGhvZEFubm90YXRpb24aGMr7jjsT", 
-            "EhFTZXJ2aWNlQW5ub3RhdGlvbjoyCglmaWxlX29wdDESHC5nb29nbGUucHJv", 
-            "dG9idWYuRmlsZU9wdGlvbnMYjp3YAyABKAQ6OAoMbWVzc2FnZV9vcHQxEh8u", 
-            "Z29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJyt2AMgASgFOjQKCmZp", 
-            "ZWxkX29wdDESHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIi82AMg", 
-            "ASgGOjgKCmZpZWxkX29wdDISHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRp", 
-            "b25zGLmh2QMgASgFOgI0MjoyCgllbnVtX29wdDESHC5nb29nbGUucHJvdG9i", 
-            "dWYuRW51bU9wdGlvbnMY6J7ZAyABKA86PAoPZW51bV92YWx1ZV9vcHQxEiEu", 
-            "Z29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMY5qBfIAEoBTo4Cgxz", 
-            "ZXJ2aWNlX29wdDESHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMY", 
-            "orbhAyABKBI6VQoLbWV0aG9kX29wdDESHi5nb29nbGUucHJvdG9idWYuTWV0", 
-            "aG9kT3B0aW9ucxisz+EDIAEoDjIdLnByb3RvYnVmX3VuaXR0ZXN0Lk1ldGhv", 
-            "ZE9wdDE6NAoIYm9vbF9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9w", 
-            "dGlvbnMY6qvWAyABKAg6NQoJaW50MzJfb3B0Eh8uZ29vZ2xlLnByb3RvYnVm", 
-            "Lk1lc3NhZ2VPcHRpb25zGO2o1gMgASgFOjUKCWludDY0X29wdBIfLmdvb2ds", 
-            "ZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjGp9YDIAEoAzo2Cgp1aW50MzJf", 
-            "b3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGLCi1gMgASgN", 
-            "OjYKCnVpbnQ2NF9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlv", 
-            "bnMY347WAyABKAQ6NgoKc2ludDMyX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5N", 
-            "ZXNzYWdlT3B0aW9ucxjAiNYDIAEoETo2CgpzaW50NjRfb3B0Eh8uZ29vZ2xl", 
-            "LnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGP+C1gMgASgSOjcKC2ZpeGVkMzJf", 
-            "b3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGNP+1QMgASgH", 
-            "OjcKC2ZpeGVkNjRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRp", 
-            "b25zGOL91QMgASgGOjgKDHNmaXhlZDMyX29wdBIfLmdvb2dsZS5wcm90b2J1", 
-            "Zi5NZXNzYWdlT3B0aW9ucxjV8dUDIAEoDzo4CgxzZml4ZWQ2NF9vcHQSHy5n", 
-            "b29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY44rVAyABKBA6NQoJZmxv", 
-            "YXRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGP671AMg", 
-            "ASgCOjYKCmRvdWJsZV9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9w", 
-            "dGlvbnMYzavUAyABKAE6NgoKc3RyaW5nX29wdBIfLmdvb2dsZS5wcm90b2J1", 
-            "Zi5NZXNzYWdlT3B0aW9ucxjFq9QDIAEoCTo1CglieXRlc19vcHQSHy5nb29n", 
-            "bGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYlqvUAyABKAw6cAoIZW51bV9v", 
-            "cHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYkavUAyABKA4y", 
-            "Oi5wcm90b2J1Zl91bml0dGVzdC5EdW1teU1lc3NhZ2VDb250YWluaW5nRW51", 
-            "bS5UZXN0RW51bVR5cGU6cAoQbWVzc2FnZV90eXBlX29wdBIfLmdvb2dsZS5w", 
-            "cm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiv8tMDIAEoCzIyLnByb3RvYnVmX3Vu", 
-            "aXR0ZXN0LkR1bW15TWVzc2FnZUludmFsaWRBc09wdGlvblR5cGU6NgoEcXV1", 
-            "eBIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMRjb4NMD", 
-            "IAEoBTpeCgVjb3JnZRIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRp", 
-            "b25UeXBlMRjS3tMDIAEoCzIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhP", 
-            "cHRpb25UeXBlMzo4CgZncmF1bHQSJS5wcm90b2J1Zl91bml0dGVzdC5Db21w", 
-            "bGV4T3B0aW9uVHlwZTIY7/zSAyABKAU6XwoGZ2FycGx5EiUucHJvdG9idWZf", 
-            "dW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUyGMj10gMgASgLMiUucHJvdG9i", 
-            "dWZfdW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUxOl8KDGNvbXBsZXhfb3B0", 
-            "MRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxik3NIDIAEoCzIl", 
-            "LnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMTpfCgxjb21w", 
-            "bGV4X29wdDISHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY1Y/S", 
-            "AyABKAsyJS5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0aW9uVHlwZTI6", 
-            "XwoMY29tcGxleF9vcHQzEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRp", 
-            "b25zGO+L0gMgASgLMiUucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlv", 
-            "blR5cGUzOlcKC2NvbXBsZXhvcHQ2Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3Nh", 
-            "Z2VPcHRpb25zGMzLzwMgASgKMh4ucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxl", 
-            "eE9wdDY6TgoHZmlsZW9wdBIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9u", 
-            "cxjP3bAHIAEoCzIcLnByb3RvYnVmX3VuaXR0ZXN0LkFnZ3JlZ2F0ZTpQCgZt", 
-            "c2dvcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYmOqwByAB", 
-            "KAsyHC5wcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGU6UAoIZmllbGRvcHQS", 
-            "HS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGJ70sAcgASgLMhwucHJv", 
-            "dG9idWZfdW5pdHRlc3QuQWdncmVnYXRlOk4KB2VudW1vcHQSHC5nb29nbGUu", 
-            "cHJvdG9idWYuRW51bU9wdGlvbnMY0oKxByABKAsyHC5wcm90b2J1Zl91bml0", 
-            "dGVzdC5BZ2dyZWdhdGU6VgoKZW51bXZhbG9wdBIhLmdvb2dsZS5wcm90b2J1", 
-            "Zi5FbnVtVmFsdWVPcHRpb25zGMmfsQcgASgLMhwucHJvdG9idWZfdW5pdHRl", 
-            "c3QuQWdncmVnYXRlOlQKCnNlcnZpY2VvcHQSHy5nb29nbGUucHJvdG9idWYu", 
-            "U2VydmljZU9wdGlvbnMYue+xByABKAsyHC5wcm90b2J1Zl91bml0dGVzdC5B", 
-            "Z2dyZWdhdGU6UgoJbWV0aG9kb3B0Eh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhv", 
-            "ZE9wdGlvbnMYiemyByABKAsyHC5wcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdh", 
-            "dGVCqwGAAQGIAQGQAQGqAiFHb29nbGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQ", 
-            "cm90b3Pw6MEd6q3A5ST67IU7cAhkEg5GaWxlQW5ub3RhdGlvbhoWEhROZXN0", 
-            "ZWRGaWxlQW5ub3RhdGlvbiIe+uyFOxkSF0ZpbGVFeHRlbnNpb25Bbm5vdGF0", 
-          "aW9uKiQLEPbrrgcaGwoZRW1iZWRkZWRNZXNzYWdlU2V0RWxlbWVudAw="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_TestMessageWithCustomOptions__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_TestMessageWithCustomOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions, global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.Builder>(internal__static_protobuf_unittest_TestMessageWithCustomOptions__Descriptor,
-                new string[] { "Field1", });
-        internal__static_protobuf_unittest_CustomOptionFooRequest__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_protobuf_unittest_CustomOptionFooRequest__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.Builder>(internal__static_protobuf_unittest_CustomOptionFooRequest__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_CustomOptionFooResponse__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_protobuf_unittest_CustomOptionFooResponse__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.Builder>(internal__static_protobuf_unittest_CustomOptionFooResponse__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_CustomOptionFooClientMessage__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_protobuf_unittest_CustomOptionFooClientMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooClientMessage, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooClientMessage.Builder>(internal__static_protobuf_unittest_CustomOptionFooClientMessage__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_CustomOptionFooServerMessage__Descriptor = Descriptor.MessageTypes[4];
-        internal__static_protobuf_unittest_CustomOptionFooServerMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooServerMessage, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooServerMessage.Builder>(internal__static_protobuf_unittest_CustomOptionFooServerMessage__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_DummyMessageContainingEnum__Descriptor = Descriptor.MessageTypes[5];
-        internal__static_protobuf_unittest_DummyMessageContainingEnum__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum, global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Builder>(internal__static_protobuf_unittest_DummyMessageContainingEnum__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__Descriptor = Descriptor.MessageTypes[6];
-        internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType, global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.Builder>(internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_CustomOptionMinIntegerValues__Descriptor = Descriptor.MessageTypes[7];
-        internal__static_protobuf_unittest_CustomOptionMinIntegerValues__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.Builder>(internal__static_protobuf_unittest_CustomOptionMinIntegerValues__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__Descriptor = Descriptor.MessageTypes[8];
-        internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.Builder>(internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_CustomOptionOtherValues__Descriptor = Descriptor.MessageTypes[9];
-        internal__static_protobuf_unittest_CustomOptionOtherValues__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.Builder>(internal__static_protobuf_unittest_CustomOptionOtherValues__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_SettingRealsFromPositiveInts__Descriptor = Descriptor.MessageTypes[10];
-        internal__static_protobuf_unittest_SettingRealsFromPositiveInts__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts, global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.Builder>(internal__static_protobuf_unittest_SettingRealsFromPositiveInts__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_SettingRealsFromNegativeInts__Descriptor = Descriptor.MessageTypes[11];
-        internal__static_protobuf_unittest_SettingRealsFromNegativeInts__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts, global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.Builder>(internal__static_protobuf_unittest_SettingRealsFromNegativeInts__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_ComplexOptionType1__Descriptor = Descriptor.MessageTypes[12];
-        internal__static_protobuf_unittest_ComplexOptionType1__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder>(internal__static_protobuf_unittest_ComplexOptionType1__Descriptor,
-                new string[] { "Foo", "Foo2", "Foo3", "Foo4", });
-        internal__static_protobuf_unittest_ComplexOptionType2__Descriptor = Descriptor.MessageTypes[13];
-        internal__static_protobuf_unittest_ComplexOptionType2__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Builder>(internal__static_protobuf_unittest_ComplexOptionType2__Descriptor,
-                new string[] { "Bar", "Baz", "Fred", "Barney", });
-        internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__Descriptor = internal__static_protobuf_unittest_ComplexOptionType2__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder>(internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__Descriptor,
-                new string[] { "Waldo", });
-        global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.ComplexOpt4 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Descriptor.Extensions[0]);
-        internal__static_protobuf_unittest_ComplexOptionType3__Descriptor = Descriptor.MessageTypes[14];
-        internal__static_protobuf_unittest_ComplexOptionType3__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Builder>(internal__static_protobuf_unittest_ComplexOptionType3__Descriptor,
-                new string[] { "Qux", "ComplexOptionType5", });
-        internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__Descriptor = internal__static_protobuf_unittest_ComplexOptionType3__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder>(internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__Descriptor,
-                new string[] { "Plugh", });
-        internal__static_protobuf_unittest_ComplexOpt6__Descriptor = Descriptor.MessageTypes[15];
-        internal__static_protobuf_unittest_ComplexOpt6__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOpt6, global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.Builder>(internal__static_protobuf_unittest_ComplexOpt6__Descriptor,
-                new string[] { "Xyzzy", });
-        internal__static_protobuf_unittest_VariousComplexOptions__Descriptor = Descriptor.MessageTypes[16];
-        internal__static_protobuf_unittest_VariousComplexOptions__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions, global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.Builder>(internal__static_protobuf_unittest_VariousComplexOptions__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_AggregateMessageSet__Descriptor = Descriptor.MessageTypes[17];
-        internal__static_protobuf_unittest_AggregateMessageSet__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet, global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Builder>(internal__static_protobuf_unittest_AggregateMessageSet__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_AggregateMessageSetElement__Descriptor = Descriptor.MessageTypes[18];
-        internal__static_protobuf_unittest_AggregateMessageSetElement__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement, global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.Builder>(internal__static_protobuf_unittest_AggregateMessageSetElement__Descriptor,
-                new string[] { "S", });
-        global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.MessageSetExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.Descriptor.Extensions[0]);
-        internal__static_protobuf_unittest_Aggregate__Descriptor = Descriptor.MessageTypes[19];
-        internal__static_protobuf_unittest_Aggregate__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Aggregate, global::Google.ProtocolBuffers.TestProtos.Aggregate.Builder>(internal__static_protobuf_unittest_Aggregate__Descriptor,
-                new string[] { "I", "S", "Sub", "File", "Mset", });
-        global::Google.ProtocolBuffers.TestProtos.Aggregate.Nested = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Aggregate.Descriptor.Extensions[0]);
-        internal__static_protobuf_unittest_AggregateMessage__Descriptor = Descriptor.MessageTypes[20];
-        internal__static_protobuf_unittest_AggregateMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessage, global::Google.ProtocolBuffers.TestProtos.AggregateMessage.Builder>(internal__static_protobuf_unittest_AggregateMessage__Descriptor,
-                new string[] { "Fieldname", });
-        internal__static_protobuf_unittest_NestedOptionType__Descriptor = Descriptor.MessageTypes[21];
-        internal__static_protobuf_unittest_NestedOptionType__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.NestedOptionType, global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Builder>(internal__static_protobuf_unittest_NestedOptionType__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_NestedOptionType_NestedMessage__Descriptor = internal__static_protobuf_unittest_NestedOptionType__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_NestedOptionType_NestedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_NestedOptionType_NestedMessage__Descriptor,
-                new string[] { "NestedField", });
-        global::Google.ProtocolBuffers.TestProtos.NestedOptionType.NestedExtension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.FileOpt1 = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.MessageOpt1 = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[1]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.FieldOpt1 = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[2]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.FieldOpt2 = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[3]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.EnumOpt1 = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[4]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.EnumValueOpt1 = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[5]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ServiceOpt1 = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[6]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.MethodOpt1 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.MethodOpt1>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[7]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.BoolOpt = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[8]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Int32Opt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[9]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Int64Opt = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[10]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Uint32Opt = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[11]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Uint64Opt = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[12]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Sint32Opt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[13]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Sint64Opt = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[14]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Fixed32Opt = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[15]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Fixed64Opt = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[16]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Sfixed32Opt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[17]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Sfixed64Opt = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[18]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.FloatOpt = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[19]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.DoubleOpt = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[20]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.StringOpt = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[21]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.BytesOpt = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[22]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.EnumOpt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Types.TestEnumType>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[23]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.MessageTypeOpt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[24]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Quux = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[25]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Corge = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[26]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Grault = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[27]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Garply = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[28]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ComplexOpt1 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[29]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ComplexOpt2 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[30]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ComplexOpt3 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[31]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.ComplexOpt6 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOpt6>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[32]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Fileopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[33]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Msgopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[34]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Fieldopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[35]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Enumopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[36]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Enumvalopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[37]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Serviceopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[38]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Methodopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor.Extensions[39]);
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, 
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Enums
-  public enum MethodOpt1 {
-    METHODOPT1_VAL1 = 1,
-    METHODOPT1_VAL2 = 2,
-  }
-
-  public enum AggregateEnum {
-    VALUE = 1,
-  }
-
-  #endregion
-
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestMessageWithCustomOptions : pb::GeneratedMessage<TestMessageWithCustomOptions, TestMessageWithCustomOptions.Builder> {
-    private TestMessageWithCustomOptions() { }
-    private static readonly TestMessageWithCustomOptions defaultInstance = new TestMessageWithCustomOptions().MakeReadOnly();
-    private static readonly string[] _testMessageWithCustomOptionsFieldNames = new string[] { "field1" };
-    private static readonly uint[] _testMessageWithCustomOptionsFieldTags = new uint[] { 10 };
-    public static TestMessageWithCustomOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestMessageWithCustomOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestMessageWithCustomOptions ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_TestMessageWithCustomOptions__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestMessageWithCustomOptions, TestMessageWithCustomOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_TestMessageWithCustomOptions__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum AnEnum {
-        ANENUM_VAL1 = 1,
-        ANENUM_VAL2 = 2,
-      }
-
-    }
-    #endregion
-
-    public const int Field1FieldNumber = 1;
-    private bool hasField1;
-    private string field1_ = "";
-    public bool HasField1 {
-      get { return hasField1; }
-    }
-    public string Field1 {
-      get { return field1_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testMessageWithCustomOptionsFieldNames;
-      if (hasField1) {
-        output.WriteString(1, field_names[0], Field1);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasField1) {
-        size += pb::CodedOutputStream.ComputeStringSize(1, Field1);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestMessageWithCustomOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageWithCustomOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestMessageWithCustomOptions MakeReadOnly() {
-      return this;
-    }
-
-    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(TestMessageWithCustomOptions prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestMessageWithCustomOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestMessageWithCustomOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestMessageWithCustomOptions result;
-
-      private TestMessageWithCustomOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestMessageWithCustomOptions original = result;
-          result = new TestMessageWithCustomOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestMessageWithCustomOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.Descriptor; }
-      }
-
-      public override TestMessageWithCustomOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.DefaultInstance; }
-      }
-
-      public override TestMessageWithCustomOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestMessageWithCustomOptions) {
-          return MergeFrom((TestMessageWithCustomOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestMessageWithCustomOptions other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasField1) {
-          Field1 = other.Field1;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testMessageWithCustomOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testMessageWithCustomOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              result.hasField1 = input.ReadString(ref result.field1_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasField1 {
-        get { return result.hasField1; }
-      }
-      public string Field1 {
-        get { return result.Field1; }
-        set { SetField1(value); }
-      }
-      public Builder SetField1(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasField1 = true;
-        result.field1_ = value;
-        return this;
-      }
-      public Builder ClearField1() {
-        PrepareBuilder();
-        result.hasField1 = false;
-        result.field1_ = "";
-        return this;
-      }
-    }
-    static TestMessageWithCustomOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class CustomOptionFooRequest : pb::GeneratedMessage<CustomOptionFooRequest, CustomOptionFooRequest.Builder> {
-    private CustomOptionFooRequest() { }
-    private static readonly CustomOptionFooRequest defaultInstance = new CustomOptionFooRequest().MakeReadOnly();
-    private static readonly string[] _customOptionFooRequestFieldNames = new string[] {  };
-    private static readonly uint[] _customOptionFooRequestFieldTags = new uint[] {  };
-    public static CustomOptionFooRequest DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override CustomOptionFooRequest DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override CustomOptionFooRequest ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionFooRequest__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionFooRequest, CustomOptionFooRequest.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionFooRequest__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _customOptionFooRequestFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static CustomOptionFooRequest ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionFooRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CustomOptionFooRequest MakeReadOnly() {
-      return this;
-    }
-
-    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(CustomOptionFooRequest prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionFooRequest, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CustomOptionFooRequest cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private CustomOptionFooRequest result;
-
-      private CustomOptionFooRequest PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CustomOptionFooRequest original = result;
-          result = new CustomOptionFooRequest();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override CustomOptionFooRequest MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.Descriptor; }
-      }
-
-      public override CustomOptionFooRequest DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.DefaultInstance; }
-      }
-
-      public override CustomOptionFooRequest BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CustomOptionFooRequest) {
-          return MergeFrom((CustomOptionFooRequest) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(CustomOptionFooRequest other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_customOptionFooRequestFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _customOptionFooRequestFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static CustomOptionFooRequest() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class CustomOptionFooResponse : pb::GeneratedMessage<CustomOptionFooResponse, CustomOptionFooResponse.Builder> {
-    private CustomOptionFooResponse() { }
-    private static readonly CustomOptionFooResponse defaultInstance = new CustomOptionFooResponse().MakeReadOnly();
-    private static readonly string[] _customOptionFooResponseFieldNames = new string[] {  };
-    private static readonly uint[] _customOptionFooResponseFieldTags = new uint[] {  };
-    public static CustomOptionFooResponse DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override CustomOptionFooResponse DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override CustomOptionFooResponse ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionFooResponse__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionFooResponse, CustomOptionFooResponse.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionFooResponse__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _customOptionFooResponseFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static CustomOptionFooResponse ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionFooResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CustomOptionFooResponse MakeReadOnly() {
-      return this;
-    }
-
-    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(CustomOptionFooResponse prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionFooResponse, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CustomOptionFooResponse cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private CustomOptionFooResponse result;
-
-      private CustomOptionFooResponse PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CustomOptionFooResponse original = result;
-          result = new CustomOptionFooResponse();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override CustomOptionFooResponse MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.Descriptor; }
-      }
-
-      public override CustomOptionFooResponse DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.DefaultInstance; }
-      }
-
-      public override CustomOptionFooResponse BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CustomOptionFooResponse) {
-          return MergeFrom((CustomOptionFooResponse) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(CustomOptionFooResponse other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_customOptionFooResponseFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _customOptionFooResponseFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static CustomOptionFooResponse() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class CustomOptionFooClientMessage : pb::GeneratedMessage<CustomOptionFooClientMessage, CustomOptionFooClientMessage.Builder> {
-    private CustomOptionFooClientMessage() { }
-    private static readonly CustomOptionFooClientMessage defaultInstance = new CustomOptionFooClientMessage().MakeReadOnly();
-    private static readonly string[] _customOptionFooClientMessageFieldNames = new string[] {  };
-    private static readonly uint[] _customOptionFooClientMessageFieldTags = new uint[] {  };
-    public static CustomOptionFooClientMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override CustomOptionFooClientMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override CustomOptionFooClientMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionFooClientMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionFooClientMessage, CustomOptionFooClientMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionFooClientMessage__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _customOptionFooClientMessageFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static CustomOptionFooClientMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionFooClientMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CustomOptionFooClientMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(CustomOptionFooClientMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionFooClientMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CustomOptionFooClientMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private CustomOptionFooClientMessage result;
-
-      private CustomOptionFooClientMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CustomOptionFooClientMessage original = result;
-          result = new CustomOptionFooClientMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override CustomOptionFooClientMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooClientMessage.Descriptor; }
-      }
-
-      public override CustomOptionFooClientMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooClientMessage.DefaultInstance; }
-      }
-
-      public override CustomOptionFooClientMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CustomOptionFooClientMessage) {
-          return MergeFrom((CustomOptionFooClientMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(CustomOptionFooClientMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionFooClientMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_customOptionFooClientMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _customOptionFooClientMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static CustomOptionFooClientMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class CustomOptionFooServerMessage : pb::GeneratedMessage<CustomOptionFooServerMessage, CustomOptionFooServerMessage.Builder> {
-    private CustomOptionFooServerMessage() { }
-    private static readonly CustomOptionFooServerMessage defaultInstance = new CustomOptionFooServerMessage().MakeReadOnly();
-    private static readonly string[] _customOptionFooServerMessageFieldNames = new string[] {  };
-    private static readonly uint[] _customOptionFooServerMessageFieldTags = new uint[] {  };
-    public static CustomOptionFooServerMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override CustomOptionFooServerMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override CustomOptionFooServerMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionFooServerMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionFooServerMessage, CustomOptionFooServerMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionFooServerMessage__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _customOptionFooServerMessageFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static CustomOptionFooServerMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionFooServerMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CustomOptionFooServerMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(CustomOptionFooServerMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionFooServerMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CustomOptionFooServerMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private CustomOptionFooServerMessage result;
-
-      private CustomOptionFooServerMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CustomOptionFooServerMessage original = result;
-          result = new CustomOptionFooServerMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override CustomOptionFooServerMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooServerMessage.Descriptor; }
-      }
-
-      public override CustomOptionFooServerMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooServerMessage.DefaultInstance; }
-      }
-
-      public override CustomOptionFooServerMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CustomOptionFooServerMessage) {
-          return MergeFrom((CustomOptionFooServerMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(CustomOptionFooServerMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionFooServerMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_customOptionFooServerMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _customOptionFooServerMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static CustomOptionFooServerMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class DummyMessageContainingEnum : pb::GeneratedMessage<DummyMessageContainingEnum, DummyMessageContainingEnum.Builder> {
-    private DummyMessageContainingEnum() { }
-    private static readonly DummyMessageContainingEnum defaultInstance = new DummyMessageContainingEnum().MakeReadOnly();
-    private static readonly string[] _dummyMessageContainingEnumFieldNames = new string[] {  };
-    private static readonly uint[] _dummyMessageContainingEnumFieldTags = new uint[] {  };
-    public static DummyMessageContainingEnum DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override DummyMessageContainingEnum DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override DummyMessageContainingEnum ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_DummyMessageContainingEnum__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<DummyMessageContainingEnum, DummyMessageContainingEnum.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_DummyMessageContainingEnum__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum TestEnumType {
-        TEST_OPTION_ENUM_TYPE1 = 22,
-        TEST_OPTION_ENUM_TYPE2 = -23,
-      }
-
-    }
-    #endregion
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _dummyMessageContainingEnumFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static DummyMessageContainingEnum ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DummyMessageContainingEnum ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private DummyMessageContainingEnum MakeReadOnly() {
-      return this;
-    }
-
-    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(DummyMessageContainingEnum prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<DummyMessageContainingEnum, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(DummyMessageContainingEnum cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private DummyMessageContainingEnum result;
-
-      private DummyMessageContainingEnum PrepareBuilder() {
-        if (resultIsReadOnly) {
-          DummyMessageContainingEnum original = result;
-          result = new DummyMessageContainingEnum();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override DummyMessageContainingEnum MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Descriptor; }
-      }
-
-      public override DummyMessageContainingEnum DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.DefaultInstance; }
-      }
-
-      public override DummyMessageContainingEnum BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is DummyMessageContainingEnum) {
-          return MergeFrom((DummyMessageContainingEnum) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(DummyMessageContainingEnum other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_dummyMessageContainingEnumFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _dummyMessageContainingEnumFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static DummyMessageContainingEnum() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class DummyMessageInvalidAsOptionType : pb::GeneratedMessage<DummyMessageInvalidAsOptionType, DummyMessageInvalidAsOptionType.Builder> {
-    private DummyMessageInvalidAsOptionType() { }
-    private static readonly DummyMessageInvalidAsOptionType defaultInstance = new DummyMessageInvalidAsOptionType().MakeReadOnly();
-    private static readonly string[] _dummyMessageInvalidAsOptionTypeFieldNames = new string[] {  };
-    private static readonly uint[] _dummyMessageInvalidAsOptionTypeFieldTags = new uint[] {  };
-    public static DummyMessageInvalidAsOptionType DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override DummyMessageInvalidAsOptionType DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override DummyMessageInvalidAsOptionType ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<DummyMessageInvalidAsOptionType, DummyMessageInvalidAsOptionType.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _dummyMessageInvalidAsOptionTypeFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static DummyMessageInvalidAsOptionType ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DummyMessageInvalidAsOptionType ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private DummyMessageInvalidAsOptionType MakeReadOnly() {
-      return this;
-    }
-
-    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(DummyMessageInvalidAsOptionType prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<DummyMessageInvalidAsOptionType, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(DummyMessageInvalidAsOptionType cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private DummyMessageInvalidAsOptionType result;
-
-      private DummyMessageInvalidAsOptionType PrepareBuilder() {
-        if (resultIsReadOnly) {
-          DummyMessageInvalidAsOptionType original = result;
-          result = new DummyMessageInvalidAsOptionType();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override DummyMessageInvalidAsOptionType MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.Descriptor; }
-      }
-
-      public override DummyMessageInvalidAsOptionType DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.DefaultInstance; }
-      }
-
-      public override DummyMessageInvalidAsOptionType BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is DummyMessageInvalidAsOptionType) {
-          return MergeFrom((DummyMessageInvalidAsOptionType) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(DummyMessageInvalidAsOptionType other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_dummyMessageInvalidAsOptionTypeFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _dummyMessageInvalidAsOptionTypeFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static DummyMessageInvalidAsOptionType() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class CustomOptionMinIntegerValues : pb::GeneratedMessage<CustomOptionMinIntegerValues, CustomOptionMinIntegerValues.Builder> {
-    private CustomOptionMinIntegerValues() { }
-    private static readonly CustomOptionMinIntegerValues defaultInstance = new CustomOptionMinIntegerValues().MakeReadOnly();
-    private static readonly string[] _customOptionMinIntegerValuesFieldNames = new string[] {  };
-    private static readonly uint[] _customOptionMinIntegerValuesFieldTags = new uint[] {  };
-    public static CustomOptionMinIntegerValues DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override CustomOptionMinIntegerValues DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override CustomOptionMinIntegerValues ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionMinIntegerValues__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionMinIntegerValues, CustomOptionMinIntegerValues.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionMinIntegerValues__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _customOptionMinIntegerValuesFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static CustomOptionMinIntegerValues ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionMinIntegerValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CustomOptionMinIntegerValues MakeReadOnly() {
-      return this;
-    }
-
-    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(CustomOptionMinIntegerValues prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionMinIntegerValues, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CustomOptionMinIntegerValues cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private CustomOptionMinIntegerValues result;
-
-      private CustomOptionMinIntegerValues PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CustomOptionMinIntegerValues original = result;
-          result = new CustomOptionMinIntegerValues();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override CustomOptionMinIntegerValues MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.Descriptor; }
-      }
-
-      public override CustomOptionMinIntegerValues DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.DefaultInstance; }
-      }
-
-      public override CustomOptionMinIntegerValues BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CustomOptionMinIntegerValues) {
-          return MergeFrom((CustomOptionMinIntegerValues) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(CustomOptionMinIntegerValues other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_customOptionMinIntegerValuesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _customOptionMinIntegerValuesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static CustomOptionMinIntegerValues() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class CustomOptionMaxIntegerValues : pb::GeneratedMessage<CustomOptionMaxIntegerValues, CustomOptionMaxIntegerValues.Builder> {
-    private CustomOptionMaxIntegerValues() { }
-    private static readonly CustomOptionMaxIntegerValues defaultInstance = new CustomOptionMaxIntegerValues().MakeReadOnly();
-    private static readonly string[] _customOptionMaxIntegerValuesFieldNames = new string[] {  };
-    private static readonly uint[] _customOptionMaxIntegerValuesFieldTags = new uint[] {  };
-    public static CustomOptionMaxIntegerValues DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override CustomOptionMaxIntegerValues DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override CustomOptionMaxIntegerValues ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionMaxIntegerValues, CustomOptionMaxIntegerValues.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _customOptionMaxIntegerValuesFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static CustomOptionMaxIntegerValues ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionMaxIntegerValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CustomOptionMaxIntegerValues MakeReadOnly() {
-      return this;
-    }
-
-    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(CustomOptionMaxIntegerValues prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionMaxIntegerValues, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CustomOptionMaxIntegerValues cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private CustomOptionMaxIntegerValues result;
-
-      private CustomOptionMaxIntegerValues PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CustomOptionMaxIntegerValues original = result;
-          result = new CustomOptionMaxIntegerValues();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override CustomOptionMaxIntegerValues MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.Descriptor; }
-      }
-
-      public override CustomOptionMaxIntegerValues DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.DefaultInstance; }
-      }
-
-      public override CustomOptionMaxIntegerValues BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CustomOptionMaxIntegerValues) {
-          return MergeFrom((CustomOptionMaxIntegerValues) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(CustomOptionMaxIntegerValues other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_customOptionMaxIntegerValuesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _customOptionMaxIntegerValuesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static CustomOptionMaxIntegerValues() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class CustomOptionOtherValues : pb::GeneratedMessage<CustomOptionOtherValues, CustomOptionOtherValues.Builder> {
-    private CustomOptionOtherValues() { }
-    private static readonly CustomOptionOtherValues defaultInstance = new CustomOptionOtherValues().MakeReadOnly();
-    private static readonly string[] _customOptionOtherValuesFieldNames = new string[] {  };
-    private static readonly uint[] _customOptionOtherValuesFieldTags = new uint[] {  };
-    public static CustomOptionOtherValues DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override CustomOptionOtherValues DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override CustomOptionOtherValues ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionOtherValues__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionOtherValues, CustomOptionOtherValues.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_CustomOptionOtherValues__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _customOptionOtherValuesFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static CustomOptionOtherValues ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static CustomOptionOtherValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private CustomOptionOtherValues MakeReadOnly() {
-      return this;
-    }
-
-    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(CustomOptionOtherValues prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionOtherValues, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(CustomOptionOtherValues cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private CustomOptionOtherValues result;
-
-      private CustomOptionOtherValues PrepareBuilder() {
-        if (resultIsReadOnly) {
-          CustomOptionOtherValues original = result;
-          result = new CustomOptionOtherValues();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override CustomOptionOtherValues MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.Descriptor; }
-      }
-
-      public override CustomOptionOtherValues DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.DefaultInstance; }
-      }
-
-      public override CustomOptionOtherValues BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is CustomOptionOtherValues) {
-          return MergeFrom((CustomOptionOtherValues) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(CustomOptionOtherValues other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_customOptionOtherValuesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _customOptionOtherValuesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static CustomOptionOtherValues() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SettingRealsFromPositiveInts : pb::GeneratedMessage<SettingRealsFromPositiveInts, SettingRealsFromPositiveInts.Builder> {
-    private SettingRealsFromPositiveInts() { }
-    private static readonly SettingRealsFromPositiveInts defaultInstance = new SettingRealsFromPositiveInts().MakeReadOnly();
-    private static readonly string[] _settingRealsFromPositiveIntsFieldNames = new string[] {  };
-    private static readonly uint[] _settingRealsFromPositiveIntsFieldTags = new uint[] {  };
-    public static SettingRealsFromPositiveInts DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SettingRealsFromPositiveInts DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SettingRealsFromPositiveInts ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_SettingRealsFromPositiveInts__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SettingRealsFromPositiveInts, SettingRealsFromPositiveInts.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_SettingRealsFromPositiveInts__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _settingRealsFromPositiveIntsFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static SettingRealsFromPositiveInts ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SettingRealsFromPositiveInts ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SettingRealsFromPositiveInts MakeReadOnly() {
-      return this;
-    }
-
-    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(SettingRealsFromPositiveInts prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SettingRealsFromPositiveInts, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SettingRealsFromPositiveInts cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SettingRealsFromPositiveInts result;
-
-      private SettingRealsFromPositiveInts PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SettingRealsFromPositiveInts original = result;
-          result = new SettingRealsFromPositiveInts();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SettingRealsFromPositiveInts MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.Descriptor; }
-      }
-
-      public override SettingRealsFromPositiveInts DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.DefaultInstance; }
-      }
-
-      public override SettingRealsFromPositiveInts BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is SettingRealsFromPositiveInts) {
-          return MergeFrom((SettingRealsFromPositiveInts) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(SettingRealsFromPositiveInts other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_settingRealsFromPositiveIntsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _settingRealsFromPositiveIntsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static SettingRealsFromPositiveInts() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class SettingRealsFromNegativeInts : pb::GeneratedMessage<SettingRealsFromNegativeInts, SettingRealsFromNegativeInts.Builder> {
-    private SettingRealsFromNegativeInts() { }
-    private static readonly SettingRealsFromNegativeInts defaultInstance = new SettingRealsFromNegativeInts().MakeReadOnly();
-    private static readonly string[] _settingRealsFromNegativeIntsFieldNames = new string[] {  };
-    private static readonly uint[] _settingRealsFromNegativeIntsFieldTags = new uint[] {  };
-    public static SettingRealsFromNegativeInts DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override SettingRealsFromNegativeInts DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override SettingRealsFromNegativeInts ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_SettingRealsFromNegativeInts__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<SettingRealsFromNegativeInts, SettingRealsFromNegativeInts.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_SettingRealsFromNegativeInts__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _settingRealsFromNegativeIntsFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static SettingRealsFromNegativeInts ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static SettingRealsFromNegativeInts ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private SettingRealsFromNegativeInts MakeReadOnly() {
-      return this;
-    }
-
-    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(SettingRealsFromNegativeInts prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<SettingRealsFromNegativeInts, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(SettingRealsFromNegativeInts cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private SettingRealsFromNegativeInts result;
-
-      private SettingRealsFromNegativeInts PrepareBuilder() {
-        if (resultIsReadOnly) {
-          SettingRealsFromNegativeInts original = result;
-          result = new SettingRealsFromNegativeInts();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override SettingRealsFromNegativeInts MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.Descriptor; }
-      }
-
-      public override SettingRealsFromNegativeInts DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.DefaultInstance; }
-      }
-
-      public override SettingRealsFromNegativeInts BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is SettingRealsFromNegativeInts) {
-          return MergeFrom((SettingRealsFromNegativeInts) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(SettingRealsFromNegativeInts other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_settingRealsFromNegativeIntsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _settingRealsFromNegativeIntsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static SettingRealsFromNegativeInts() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class ComplexOptionType1 : pb::ExtendableMessage<ComplexOptionType1, ComplexOptionType1.Builder> {
-    private ComplexOptionType1() { }
-    private static readonly ComplexOptionType1 defaultInstance = new ComplexOptionType1().MakeReadOnly();
-    private static readonly string[] _complexOptionType1FieldNames = new string[] { "foo", "foo2", "foo3", "foo4" };
-    private static readonly uint[] _complexOptionType1FieldTags = new uint[] { 8, 16, 24, 32 };
-    public static ComplexOptionType1 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override ComplexOptionType1 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override ComplexOptionType1 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType1__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType1, ComplexOptionType1.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType1__FieldAccessorTable; }
-    }
-
-    public const int FooFieldNumber = 1;
-    private bool hasFoo;
-    private int foo_;
-    public bool HasFoo {
-      get { return hasFoo; }
-    }
-    public int Foo {
-      get { return foo_; }
-    }
-
-    public const int Foo2FieldNumber = 2;
-    private bool hasFoo2;
-    private int foo2_;
-    public bool HasFoo2 {
-      get { return hasFoo2; }
-    }
-    public int Foo2 {
-      get { return foo2_; }
-    }
-
-    public const int Foo3FieldNumber = 3;
-    private bool hasFoo3;
-    private int foo3_;
-    public bool HasFoo3 {
-      get { return hasFoo3; }
-    }
-    public int Foo3 {
-      get { return foo3_; }
-    }
-
-    public const int Foo4FieldNumber = 4;
-    private pbc::PopsicleList<int> foo4_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> Foo4List {
-      get { return pbc::Lists.AsReadOnly(foo4_); }
-    }
-    public int Foo4Count {
-      get { return foo4_.Count; }
-    }
-    public int GetFoo4(int index) {
-      return foo4_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _complexOptionType1FieldNames;
-      pb::ExtendableMessage<ComplexOptionType1, ComplexOptionType1.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (hasFoo) {
-        output.WriteInt32(1, field_names[0], Foo);
-      }
-      if (hasFoo2) {
-        output.WriteInt32(2, field_names[1], Foo2);
-      }
-      if (hasFoo3) {
-        output.WriteInt32(3, field_names[2], Foo3);
-      }
-      if (foo4_.Count > 0) {
-        output.WriteInt32Array(4, field_names[3], foo4_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasFoo) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Foo);
-      }
-      if (hasFoo2) {
-        size += pb::CodedOutputStream.ComputeInt32Size(2, Foo2);
-      }
-      if (hasFoo3) {
-        size += pb::CodedOutputStream.ComputeInt32Size(3, Foo3);
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in Foo4List) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * foo4_.Count;
-      }
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static ComplexOptionType1 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ComplexOptionType1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ComplexOptionType1 MakeReadOnly() {
-      foo4_.MakeReadOnly();
-      return this;
-    }
-
-    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(ComplexOptionType1 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<ComplexOptionType1, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ComplexOptionType1 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private ComplexOptionType1 result;
-
-      private ComplexOptionType1 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ComplexOptionType1 original = result;
-          result = new ComplexOptionType1();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override ComplexOptionType1 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Descriptor; }
-      }
-
-      public override ComplexOptionType1 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance; }
-      }
-
-      public override ComplexOptionType1 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ComplexOptionType1) {
-          return MergeFrom((ComplexOptionType1) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(ComplexOptionType1 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasFoo) {
-          Foo = other.Foo;
-        }
-        if (other.HasFoo2) {
-          Foo2 = other.Foo2;
-        }
-        if (other.HasFoo3) {
-          Foo3 = other.Foo3;
-        }
-        if (other.foo4_.Count != 0) {
-          result.foo4_.Add(other.foo4_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_complexOptionType1FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _complexOptionType1FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasFoo = input.ReadInt32(ref result.foo_);
-              break;
-            }
-            case 16: {
-              result.hasFoo2 = input.ReadInt32(ref result.foo2_);
-              break;
-            }
-            case 24: {
-              result.hasFoo3 = input.ReadInt32(ref result.foo3_);
-              break;
-            }
-            case 34:
-            case 32: {
-              input.ReadInt32Array(tag, field_name, result.foo4_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasFoo {
-        get { return result.hasFoo; }
-      }
-      public int Foo {
-        get { return result.Foo; }
-        set { SetFoo(value); }
-      }
-      public Builder SetFoo(int value) {
-        PrepareBuilder();
-        result.hasFoo = true;
-        result.foo_ = value;
-        return this;
-      }
-      public Builder ClearFoo() {
-        PrepareBuilder();
-        result.hasFoo = false;
-        result.foo_ = 0;
-        return this;
-      }
-
-      public bool HasFoo2 {
-        get { return result.hasFoo2; }
-      }
-      public int Foo2 {
-        get { return result.Foo2; }
-        set { SetFoo2(value); }
-      }
-      public Builder SetFoo2(int value) {
-        PrepareBuilder();
-        result.hasFoo2 = true;
-        result.foo2_ = value;
-        return this;
-      }
-      public Builder ClearFoo2() {
-        PrepareBuilder();
-        result.hasFoo2 = false;
-        result.foo2_ = 0;
-        return this;
-      }
-
-      public bool HasFoo3 {
-        get { return result.hasFoo3; }
-      }
-      public int Foo3 {
-        get { return result.Foo3; }
-        set { SetFoo3(value); }
-      }
-      public Builder SetFoo3(int value) {
-        PrepareBuilder();
-        result.hasFoo3 = true;
-        result.foo3_ = value;
-        return this;
-      }
-      public Builder ClearFoo3() {
-        PrepareBuilder();
-        result.hasFoo3 = false;
-        result.foo3_ = 0;
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> Foo4List {
-        get { return PrepareBuilder().foo4_; }
-      }
-      public int Foo4Count {
-        get { return result.Foo4Count; }
-      }
-      public int GetFoo4(int index) {
-        return result.GetFoo4(index);
-      }
-      public Builder SetFoo4(int index, int value) {
-        PrepareBuilder();
-        result.foo4_[index] = value;
-        return this;
-      }
-      public Builder AddFoo4(int value) {
-        PrepareBuilder();
-        result.foo4_.Add(value);
-        return this;
-      }
-      public Builder AddRangeFoo4(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.foo4_.Add(values);
-        return this;
-      }
-      public Builder ClearFoo4() {
-        PrepareBuilder();
-        result.foo4_.Clear();
-        return this;
-      }
-    }
-    static ComplexOptionType1() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class ComplexOptionType2 : pb::ExtendableMessage<ComplexOptionType2, ComplexOptionType2.Builder> {
-    private ComplexOptionType2() { }
-    private static readonly ComplexOptionType2 defaultInstance = new ComplexOptionType2().MakeReadOnly();
-    private static readonly string[] _complexOptionType2FieldNames = new string[] { "bar", "barney", "baz", "fred" };
-    private static readonly uint[] _complexOptionType2FieldTags = new uint[] { 10, 34, 16, 26 };
-    public static ComplexOptionType2 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override ComplexOptionType2 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override ComplexOptionType2 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType2__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType2, ComplexOptionType2.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType2__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class ComplexOptionType4 : pb::GeneratedMessage<ComplexOptionType4, ComplexOptionType4.Builder> {
-        private ComplexOptionType4() { }
-        private static readonly ComplexOptionType4 defaultInstance = new ComplexOptionType4().MakeReadOnly();
-        private static readonly string[] _complexOptionType4FieldNames = new string[] { "waldo" };
-        private static readonly uint[] _complexOptionType4FieldTags = new uint[] { 8 };
-        public static ComplexOptionType4 DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override ComplexOptionType4 DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override ComplexOptionType4 ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType4, ComplexOptionType4.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__FieldAccessorTable; }
-        }
-
-        public const int ComplexOpt4FieldNumber = 7633546;
-        public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4> ComplexOpt4;
-        public const int WaldoFieldNumber = 1;
-        private bool hasWaldo;
-        private int waldo_;
-        public bool HasWaldo {
-          get { return hasWaldo; }
-        }
-        public int Waldo {
-          get { return waldo_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _complexOptionType4FieldNames;
-          if (hasWaldo) {
-            output.WriteInt32(1, field_names[0], Waldo);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasWaldo) {
-            size += pb::CodedOutputStream.ComputeInt32Size(1, Waldo);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static ComplexOptionType4 ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static ComplexOptionType4 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private ComplexOptionType4 MakeReadOnly() {
-          return this;
-        }
-
-        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(ComplexOptionType4 prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<ComplexOptionType4, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(ComplexOptionType4 cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private ComplexOptionType4 result;
-
-          private ComplexOptionType4 PrepareBuilder() {
-            if (resultIsReadOnly) {
-              ComplexOptionType4 original = result;
-              result = new ComplexOptionType4();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override ComplexOptionType4 MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Descriptor; }
-          }
-
-          public override ComplexOptionType4 DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance; }
-          }
-
-          public override ComplexOptionType4 BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is ComplexOptionType4) {
-              return MergeFrom((ComplexOptionType4) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(ComplexOptionType4 other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasWaldo) {
-              Waldo = other.Waldo;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_complexOptionType4FieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _complexOptionType4FieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 8: {
-                  result.hasWaldo = input.ReadInt32(ref result.waldo_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasWaldo {
-            get { return result.hasWaldo; }
-          }
-          public int Waldo {
-            get { return result.Waldo; }
-            set { SetWaldo(value); }
-          }
-          public Builder SetWaldo(int value) {
-            PrepareBuilder();
-            result.hasWaldo = true;
-            result.waldo_ = value;
-            return this;
-          }
-          public Builder ClearWaldo() {
-            PrepareBuilder();
-            result.hasWaldo = false;
-            result.waldo_ = 0;
-            return this;
-          }
-        }
-        static ComplexOptionType4() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int BarFieldNumber = 1;
-    private bool hasBar;
-    private global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 bar_;
-    public bool HasBar {
-      get { return hasBar; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 Bar {
-      get { return bar_ ?? global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance; }
-    }
-
-    public const int BazFieldNumber = 2;
-    private bool hasBaz;
-    private int baz_;
-    public bool HasBaz {
-      get { return hasBaz; }
-    }
-    public int Baz {
-      get { return baz_; }
-    }
-
-    public const int FredFieldNumber = 3;
-    private bool hasFred;
-    private global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 fred_;
-    public bool HasFred {
-      get { return hasFred; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 Fred {
-      get { return fred_ ?? global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance; }
-    }
-
-    public const int BarneyFieldNumber = 4;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4> barney_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4> BarneyList {
-      get { return barney_; }
-    }
-    public int BarneyCount {
-      get { return barney_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 GetBarney(int index) {
-      return barney_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (HasFred) {
-          if (!Fred.IsInitialized) return false;
-        }
-        foreach (global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 element in BarneyList) {
-          if (!element.IsInitialized) return false;
-        }
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _complexOptionType2FieldNames;
-      pb::ExtendableMessage<ComplexOptionType2, ComplexOptionType2.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (hasBar) {
-        output.WriteMessage(1, field_names[0], Bar);
-      }
-      if (hasBaz) {
-        output.WriteInt32(2, field_names[2], Baz);
-      }
-      if (hasFred) {
-        output.WriteMessage(3, field_names[3], Fred);
-      }
-      if (barney_.Count > 0) {
-        output.WriteMessageArray(4, field_names[1], barney_);
-      }
-      extensionWriter.WriteUntil(536870912, output);
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasBar) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, Bar);
-      }
-      if (hasBaz) {
-        size += pb::CodedOutputStream.ComputeInt32Size(2, Baz);
-      }
-      if (hasFred) {
-        size += pb::CodedOutputStream.ComputeMessageSize(3, Fred);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 element in BarneyList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(4, element);
-      }
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static ComplexOptionType2 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ComplexOptionType2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ComplexOptionType2 MakeReadOnly() {
-      barney_.MakeReadOnly();
-      return this;
-    }
-
-    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(ComplexOptionType2 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<ComplexOptionType2, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ComplexOptionType2 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private ComplexOptionType2 result;
-
-      private ComplexOptionType2 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ComplexOptionType2 original = result;
-          result = new ComplexOptionType2();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override ComplexOptionType2 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Descriptor; }
-      }
-
-      public override ComplexOptionType2 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.DefaultInstance; }
-      }
-
-      public override ComplexOptionType2 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ComplexOptionType2) {
-          return MergeFrom((ComplexOptionType2) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(ComplexOptionType2 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasBar) {
-          MergeBar(other.Bar);
-        }
-        if (other.HasBaz) {
-          Baz = other.Baz;
-        }
-        if (other.HasFred) {
-          MergeFred(other.Fred);
-        }
-        if (other.barney_.Count != 0) {
-          result.barney_.Add(other.barney_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_complexOptionType2FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _complexOptionType2FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.CreateBuilder();
-              if (result.hasBar) {
-                subBuilder.MergeFrom(Bar);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Bar = subBuilder.BuildPartial();
-              break;
-            }
-            case 16: {
-              result.hasBaz = input.ReadInt32(ref result.baz_);
-              break;
-            }
-            case 26: {
-              global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.CreateBuilder();
-              if (result.hasFred) {
-                subBuilder.MergeFrom(Fred);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Fred = subBuilder.BuildPartial();
-              break;
-            }
-            case 34: {
-              input.ReadMessageArray(tag, field_name, result.barney_, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasBar {
-       get { return result.hasBar; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 Bar {
-        get { return result.Bar; }
-        set { SetBar(value); }
-      }
-      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasBar = true;
-        result.bar_ = value;
-        return this;
-      }
-      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasBar = true;
-        result.bar_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasBar &&
-            result.bar_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance) {
-            result.bar_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.CreateBuilder(result.bar_).MergeFrom(value).BuildPartial();
-        } else {
-          result.bar_ = value;
-        }
-        result.hasBar = true;
-        return this;
-      }
-      public Builder ClearBar() {
-        PrepareBuilder();
-        result.hasBar = false;
-        result.bar_ = null;
-        return this;
-      }
-
-      public bool HasBaz {
-        get { return result.hasBaz; }
-      }
-      public int Baz {
-        get { return result.Baz; }
-        set { SetBaz(value); }
-      }
-      public Builder SetBaz(int value) {
-        PrepareBuilder();
-        result.hasBaz = true;
-        result.baz_ = value;
-        return this;
-      }
-      public Builder ClearBaz() {
-        PrepareBuilder();
-        result.hasBaz = false;
-        result.baz_ = 0;
-        return this;
-      }
-
-      public bool HasFred {
-       get { return result.hasFred; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 Fred {
-        get { return result.Fred; }
-        set { SetFred(value); }
-      }
-      public Builder SetFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasFred = true;
-        result.fred_ = value;
-        return this;
-      }
-      public Builder SetFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasFred = true;
-        result.fred_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasFred &&
-            result.fred_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance) {
-            result.fred_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.CreateBuilder(result.fred_).MergeFrom(value).BuildPartial();
-        } else {
-          result.fred_ = value;
-        }
-        result.hasFred = true;
-        return this;
-      }
-      public Builder ClearFred() {
-        PrepareBuilder();
-        result.hasFred = false;
-        result.fred_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4> BarneyList {
-        get { return PrepareBuilder().barney_; }
-      }
-      public int BarneyCount {
-        get { return result.BarneyCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 GetBarney(int index) {
-        return result.GetBarney(index);
-      }
-      public Builder SetBarney(int index, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.barney_[index] = value;
-        return this;
-      }
-      public Builder SetBarney(int index, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.barney_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddBarney(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.barney_.Add(value);
-        return this;
-      }
-      public Builder AddBarney(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.barney_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeBarney(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4> values) {
-        PrepareBuilder();
-        result.barney_.Add(values);
-        return this;
-      }
-      public Builder ClearBarney() {
-        PrepareBuilder();
-        result.barney_.Clear();
-        return this;
-      }
-    }
-    static ComplexOptionType2() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class ComplexOptionType3 : pb::GeneratedMessage<ComplexOptionType3, ComplexOptionType3.Builder> {
-    private ComplexOptionType3() { }
-    private static readonly ComplexOptionType3 defaultInstance = new ComplexOptionType3().MakeReadOnly();
-    private static readonly string[] _complexOptionType3FieldNames = new string[] { "complexoptiontype5", "qux" };
-    private static readonly uint[] _complexOptionType3FieldTags = new uint[] { 19, 8 };
-    public static ComplexOptionType3 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override ComplexOptionType3 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override ComplexOptionType3 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType3__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType3, ComplexOptionType3.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType3__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class ComplexOptionType5 : pb::GeneratedMessage<ComplexOptionType5, ComplexOptionType5.Builder> {
-        private ComplexOptionType5() { }
-        private static readonly ComplexOptionType5 defaultInstance = new ComplexOptionType5().MakeReadOnly();
-        private static readonly string[] _complexOptionType5FieldNames = new string[] { "plugh" };
-        private static readonly uint[] _complexOptionType5FieldTags = new uint[] { 24 };
-        public static ComplexOptionType5 DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override ComplexOptionType5 DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override ComplexOptionType5 ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType5, ComplexOptionType5.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__FieldAccessorTable; }
-        }
-
-        public const int PlughFieldNumber = 3;
-        private bool hasPlugh;
-        private int plugh_;
-        public bool HasPlugh {
-          get { return hasPlugh; }
-        }
-        public int Plugh {
-          get { return plugh_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _complexOptionType5FieldNames;
-          if (hasPlugh) {
-            output.WriteInt32(3, field_names[0], Plugh);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasPlugh) {
-            size += pb::CodedOutputStream.ComputeInt32Size(3, Plugh);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static ComplexOptionType5 ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static ComplexOptionType5 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private ComplexOptionType5 MakeReadOnly() {
-          return this;
-        }
-
-        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(ComplexOptionType5 prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<ComplexOptionType5, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(ComplexOptionType5 cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private ComplexOptionType5 result;
-
-          private ComplexOptionType5 PrepareBuilder() {
-            if (resultIsReadOnly) {
-              ComplexOptionType5 original = result;
-              result = new ComplexOptionType5();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override ComplexOptionType5 MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Descriptor; }
-          }
-
-          public override ComplexOptionType5 DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance; }
-          }
-
-          public override ComplexOptionType5 BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is ComplexOptionType5) {
-              return MergeFrom((ComplexOptionType5) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(ComplexOptionType5 other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasPlugh) {
-              Plugh = other.Plugh;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_complexOptionType5FieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _complexOptionType5FieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 24: {
-                  result.hasPlugh = input.ReadInt32(ref result.plugh_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasPlugh {
-            get { return result.hasPlugh; }
-          }
-          public int Plugh {
-            get { return result.Plugh; }
-            set { SetPlugh(value); }
-          }
-          public Builder SetPlugh(int value) {
-            PrepareBuilder();
-            result.hasPlugh = true;
-            result.plugh_ = value;
-            return this;
-          }
-          public Builder ClearPlugh() {
-            PrepareBuilder();
-            result.hasPlugh = false;
-            result.plugh_ = 0;
-            return this;
-          }
-        }
-        static ComplexOptionType5() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int QuxFieldNumber = 1;
-    private bool hasQux;
-    private int qux_;
-    public bool HasQux {
-      get { return hasQux; }
-    }
-    public int Qux {
-      get { return qux_; }
-    }
-
-    public const int ComplexOptionType5FieldNumber = 2;
-    private bool hasComplexOptionType5;
-    private global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 complexOptionType5_;
-    public bool HasComplexOptionType5 {
-      get { return hasComplexOptionType5; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 ComplexOptionType5 {
-      get { return complexOptionType5_ ?? global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _complexOptionType3FieldNames;
-      if (hasQux) {
-        output.WriteInt32(1, field_names[1], Qux);
-      }
-      if (hasComplexOptionType5) {
-        output.WriteGroup(2, field_names[0], ComplexOptionType5);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasQux) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Qux);
-      }
-      if (hasComplexOptionType5) {
-        size += pb::CodedOutputStream.ComputeGroupSize(2, ComplexOptionType5);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static ComplexOptionType3 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ComplexOptionType3 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ComplexOptionType3 MakeReadOnly() {
-      return this;
-    }
-
-    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(ComplexOptionType3 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<ComplexOptionType3, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ComplexOptionType3 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private ComplexOptionType3 result;
-
-      private ComplexOptionType3 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ComplexOptionType3 original = result;
-          result = new ComplexOptionType3();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override ComplexOptionType3 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Descriptor; }
-      }
-
-      public override ComplexOptionType3 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.DefaultInstance; }
-      }
-
-      public override ComplexOptionType3 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ComplexOptionType3) {
-          return MergeFrom((ComplexOptionType3) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(ComplexOptionType3 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasQux) {
-          Qux = other.Qux;
-        }
-        if (other.HasComplexOptionType5) {
-          MergeComplexOptionType5(other.ComplexOptionType5);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_complexOptionType3FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _complexOptionType3FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasQux = input.ReadInt32(ref result.qux_);
-              break;
-            }
-            case 19: {
-              global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.CreateBuilder();
-              if (result.hasComplexOptionType5) {
-                subBuilder.MergeFrom(ComplexOptionType5);
-              }
-              input.ReadGroup(2, subBuilder, extensionRegistry);
-              ComplexOptionType5 = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasQux {
-        get { return result.hasQux; }
-      }
-      public int Qux {
-        get { return result.Qux; }
-        set { SetQux(value); }
-      }
-      public Builder SetQux(int value) {
-        PrepareBuilder();
-        result.hasQux = true;
-        result.qux_ = value;
-        return this;
-      }
-      public Builder ClearQux() {
-        PrepareBuilder();
-        result.hasQux = false;
-        result.qux_ = 0;
-        return this;
-      }
-
-      public bool HasComplexOptionType5 {
-       get { return result.hasComplexOptionType5; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 ComplexOptionType5 {
-        get { return result.ComplexOptionType5; }
-        set { SetComplexOptionType5(value); }
-      }
-      public Builder SetComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasComplexOptionType5 = true;
-        result.complexOptionType5_ = value;
-        return this;
-      }
-      public Builder SetComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasComplexOptionType5 = true;
-        result.complexOptionType5_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasComplexOptionType5 &&
-            result.complexOptionType5_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance) {
-            result.complexOptionType5_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.CreateBuilder(result.complexOptionType5_).MergeFrom(value).BuildPartial();
-        } else {
-          result.complexOptionType5_ = value;
-        }
-        result.hasComplexOptionType5 = true;
-        return this;
-      }
-      public Builder ClearComplexOptionType5() {
-        PrepareBuilder();
-        result.hasComplexOptionType5 = false;
-        result.complexOptionType5_ = null;
-        return this;
-      }
-    }
-    static ComplexOptionType3() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class ComplexOpt6 : pb::GeneratedMessage<ComplexOpt6, ComplexOpt6.Builder> {
-    private ComplexOpt6() { }
-    private static readonly ComplexOpt6 defaultInstance = new ComplexOpt6().MakeReadOnly();
-    private static readonly string[] _complexOpt6FieldNames = new string[] { "xyzzy" };
-    private static readonly uint[] _complexOpt6FieldTags = new uint[] { 60751608 };
-    public static ComplexOpt6 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override ComplexOpt6 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override ComplexOpt6 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOpt6__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<ComplexOpt6, ComplexOpt6.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_ComplexOpt6__FieldAccessorTable; }
-    }
-
-    public const int XyzzyFieldNumber = 7593951;
-    private bool hasXyzzy;
-    private int xyzzy_;
-    public bool HasXyzzy {
-      get { return hasXyzzy; }
-    }
-    public int Xyzzy {
-      get { return xyzzy_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _complexOpt6FieldNames;
-      if (hasXyzzy) {
-        output.WriteInt32(7593951, field_names[0], Xyzzy);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasXyzzy) {
-        size += pb::CodedOutputStream.ComputeInt32Size(7593951, Xyzzy);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static ComplexOpt6 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ComplexOpt6 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOpt6 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ComplexOpt6 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOpt6 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ComplexOpt6 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ComplexOpt6 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ComplexOpt6 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ComplexOpt6 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ComplexOpt6 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ComplexOpt6 MakeReadOnly() {
-      return this;
-    }
-
-    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(ComplexOpt6 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<ComplexOpt6, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ComplexOpt6 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private ComplexOpt6 result;
-
-      private ComplexOpt6 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ComplexOpt6 original = result;
-          result = new ComplexOpt6();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override ComplexOpt6 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.Descriptor; }
-      }
-
-      public override ComplexOpt6 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.DefaultInstance; }
-      }
-
-      public override ComplexOpt6 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ComplexOpt6) {
-          return MergeFrom((ComplexOpt6) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(ComplexOpt6 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasXyzzy) {
-          Xyzzy = other.Xyzzy;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_complexOpt6FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _complexOpt6FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 60751608: {
-              result.hasXyzzy = input.ReadInt32(ref result.xyzzy_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasXyzzy {
-        get { return result.hasXyzzy; }
-      }
-      public int Xyzzy {
-        get { return result.Xyzzy; }
-        set { SetXyzzy(value); }
-      }
-      public Builder SetXyzzy(int value) {
-        PrepareBuilder();
-        result.hasXyzzy = true;
-        result.xyzzy_ = value;
-        return this;
-      }
-      public Builder ClearXyzzy() {
-        PrepareBuilder();
-        result.hasXyzzy = false;
-        result.xyzzy_ = 0;
-        return this;
-      }
-    }
-    static ComplexOpt6() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class VariousComplexOptions : pb::GeneratedMessage<VariousComplexOptions, VariousComplexOptions.Builder> {
-    private VariousComplexOptions() { }
-    private static readonly VariousComplexOptions defaultInstance = new VariousComplexOptions().MakeReadOnly();
-    private static readonly string[] _variousComplexOptionsFieldNames = new string[] {  };
-    private static readonly uint[] _variousComplexOptionsFieldTags = new uint[] {  };
-    public static VariousComplexOptions DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override VariousComplexOptions DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override VariousComplexOptions ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_VariousComplexOptions__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<VariousComplexOptions, VariousComplexOptions.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_VariousComplexOptions__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _variousComplexOptionsFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static VariousComplexOptions ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static VariousComplexOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static VariousComplexOptions ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static VariousComplexOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static VariousComplexOptions ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static VariousComplexOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static VariousComplexOptions ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static VariousComplexOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static VariousComplexOptions ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static VariousComplexOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private VariousComplexOptions MakeReadOnly() {
-      return this;
-    }
-
-    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(VariousComplexOptions prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<VariousComplexOptions, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(VariousComplexOptions cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private VariousComplexOptions result;
-
-      private VariousComplexOptions PrepareBuilder() {
-        if (resultIsReadOnly) {
-          VariousComplexOptions original = result;
-          result = new VariousComplexOptions();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override VariousComplexOptions MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.Descriptor; }
-      }
-
-      public override VariousComplexOptions DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.DefaultInstance; }
-      }
-
-      public override VariousComplexOptions BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is VariousComplexOptions) {
-          return MergeFrom((VariousComplexOptions) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(VariousComplexOptions other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_variousComplexOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _variousComplexOptionsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static VariousComplexOptions() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class AggregateMessageSet : pb::ExtendableMessage<AggregateMessageSet, AggregateMessageSet.Builder> {
-    private AggregateMessageSet() { }
-    private static readonly AggregateMessageSet defaultInstance = new AggregateMessageSet().MakeReadOnly();
-    private static readonly string[] _aggregateMessageSetFieldNames = new string[] {  };
-    private static readonly uint[] _aggregateMessageSetFieldTags = new uint[] {  };
-    public static AggregateMessageSet DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override AggregateMessageSet DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override AggregateMessageSet ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_AggregateMessageSet__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<AggregateMessageSet, AggregateMessageSet.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_AggregateMessageSet__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _aggregateMessageSetFieldNames;
-      pb::ExtendableMessage<AggregateMessageSet, AggregateMessageSet.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      extensionWriter.WriteUntil(2147483647, output);
-      UnknownFields.WriteAsMessageSetTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSizeAsMessageSet;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static AggregateMessageSet ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static AggregateMessageSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessageSet ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static AggregateMessageSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessageSet ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static AggregateMessageSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessageSet ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static AggregateMessageSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static AggregateMessageSet ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static AggregateMessageSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private AggregateMessageSet MakeReadOnly() {
-      return this;
-    }
-
-    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(AggregateMessageSet prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<AggregateMessageSet, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(AggregateMessageSet cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private AggregateMessageSet result;
-
-      private AggregateMessageSet PrepareBuilder() {
-        if (resultIsReadOnly) {
-          AggregateMessageSet original = result;
-          result = new AggregateMessageSet();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override AggregateMessageSet MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Descriptor; }
-      }
-
-      public override AggregateMessageSet DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.DefaultInstance; }
-      }
-
-      public override AggregateMessageSet BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is AggregateMessageSet) {
-          return MergeFrom((AggregateMessageSet) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(AggregateMessageSet other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.DefaultInstance) return this;
-        PrepareBuilder();
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_aggregateMessageSetFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _aggregateMessageSetFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static AggregateMessageSet() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class AggregateMessageSetElement : pb::GeneratedMessage<AggregateMessageSetElement, AggregateMessageSetElement.Builder> {
-    private AggregateMessageSetElement() { }
-    private static readonly AggregateMessageSetElement defaultInstance = new AggregateMessageSetElement().MakeReadOnly();
-    private static readonly string[] _aggregateMessageSetElementFieldNames = new string[] { "s" };
-    private static readonly uint[] _aggregateMessageSetElementFieldTags = new uint[] { 10 };
-    public static AggregateMessageSetElement DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override AggregateMessageSetElement DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override AggregateMessageSetElement ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_AggregateMessageSetElement__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<AggregateMessageSetElement, AggregateMessageSetElement.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_AggregateMessageSetElement__FieldAccessorTable; }
-    }
-
-    public const int MessageSetExtensionFieldNumber = 15447542;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement> MessageSetExtension;
-    public const int SFieldNumber = 1;
-    private bool hasS;
-    private string s_ = "";
-    public bool HasS {
-      get { return hasS; }
-    }
-    public string S {
-      get { return s_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _aggregateMessageSetElementFieldNames;
-      if (hasS) {
-        output.WriteString(1, field_names[0], S);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasS) {
-        size += pb::CodedOutputStream.ComputeStringSize(1, S);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static AggregateMessageSetElement ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static AggregateMessageSetElement ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private AggregateMessageSetElement MakeReadOnly() {
-      return this;
-    }
-
-    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(AggregateMessageSetElement prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<AggregateMessageSetElement, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(AggregateMessageSetElement cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private AggregateMessageSetElement result;
-
-      private AggregateMessageSetElement PrepareBuilder() {
-        if (resultIsReadOnly) {
-          AggregateMessageSetElement original = result;
-          result = new AggregateMessageSetElement();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override AggregateMessageSetElement MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.Descriptor; }
-      }
-
-      public override AggregateMessageSetElement DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.DefaultInstance; }
-      }
-
-      public override AggregateMessageSetElement BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is AggregateMessageSetElement) {
-          return MergeFrom((AggregateMessageSetElement) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(AggregateMessageSetElement other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasS) {
-          S = other.S;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_aggregateMessageSetElementFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _aggregateMessageSetElementFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              result.hasS = input.ReadString(ref result.s_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasS {
-        get { return result.hasS; }
-      }
-      public string S {
-        get { return result.S; }
-        set { SetS(value); }
-      }
-      public Builder SetS(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasS = true;
-        result.s_ = value;
-        return this;
-      }
-      public Builder ClearS() {
-        PrepareBuilder();
-        result.hasS = false;
-        result.s_ = "";
-        return this;
-      }
-    }
-    static AggregateMessageSetElement() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class Aggregate : pb::GeneratedMessage<Aggregate, Aggregate.Builder> {
-    private Aggregate() { }
-    private static readonly Aggregate defaultInstance = new Aggregate().MakeReadOnly();
-    private static readonly string[] _aggregateFieldNames = new string[] { "file", "i", "mset", "s", "sub" };
-    private static readonly uint[] _aggregateFieldTags = new uint[] { 34, 8, 42, 18, 26 };
-    public static Aggregate DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override Aggregate DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override Aggregate ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_Aggregate__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<Aggregate, Aggregate.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_Aggregate__FieldAccessorTable; }
-    }
-
-    public const int NestedFieldNumber = 15476903;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Nested;
-    public const int IFieldNumber = 1;
-    private bool hasI;
-    private int i_;
-    public bool HasI {
-      get { return hasI; }
-    }
-    public int I {
-      get { return i_; }
-    }
-
-    public const int SFieldNumber = 2;
-    private bool hasS;
-    private string s_ = "";
-    public bool HasS {
-      get { return hasS; }
-    }
-    public string S {
-      get { return s_; }
-    }
-
-    public const int SubFieldNumber = 3;
-    private bool hasSub;
-    private global::Google.ProtocolBuffers.TestProtos.Aggregate sub_;
-    public bool HasSub {
-      get { return hasSub; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Aggregate Sub {
-      get { return sub_ ?? global::Google.ProtocolBuffers.TestProtos.Aggregate.DefaultInstance; }
-    }
-
-    public const int FileFieldNumber = 4;
-    private bool hasFile;
-    private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions file_;
-    public bool HasFile {
-      get { return hasFile; }
-    }
-    public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions File {
-      get { return file_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; }
-    }
-
-    public const int MsetFieldNumber = 5;
-    private bool hasMset;
-    private global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet mset_;
-    public bool HasMset {
-      get { return hasMset; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet Mset {
-      get { return mset_ ?? global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (HasSub) {
-          if (!Sub.IsInitialized) return false;
-        }
-        if (HasFile) {
-          if (!File.IsInitialized) return false;
-        }
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _aggregateFieldNames;
-      if (hasI) {
-        output.WriteInt32(1, field_names[1], I);
-      }
-      if (hasS) {
-        output.WriteString(2, field_names[3], S);
-      }
-      if (hasSub) {
-        output.WriteMessage(3, field_names[4], Sub);
-      }
-      if (hasFile) {
-        output.WriteMessage(4, field_names[0], File);
-      }
-      if (hasMset) {
-        output.WriteMessage(5, field_names[2], Mset);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasI) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, I);
-      }
-      if (hasS) {
-        size += pb::CodedOutputStream.ComputeStringSize(2, S);
-      }
-      if (hasSub) {
-        size += pb::CodedOutputStream.ComputeMessageSize(3, Sub);
-      }
-      if (hasFile) {
-        size += pb::CodedOutputStream.ComputeMessageSize(4, File);
-      }
-      if (hasMset) {
-        size += pb::CodedOutputStream.ComputeMessageSize(5, Mset);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static Aggregate ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Aggregate ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Aggregate ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Aggregate ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Aggregate ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Aggregate ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static Aggregate ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static Aggregate ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static Aggregate ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Aggregate ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private Aggregate MakeReadOnly() {
-      return this;
-    }
-
-    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(Aggregate prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<Aggregate, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(Aggregate cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private Aggregate result;
-
-      private Aggregate PrepareBuilder() {
-        if (resultIsReadOnly) {
-          Aggregate original = result;
-          result = new Aggregate();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override Aggregate MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Aggregate.Descriptor; }
-      }
-
-      public override Aggregate DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Aggregate.DefaultInstance; }
-      }
-
-      public override Aggregate BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is Aggregate) {
-          return MergeFrom((Aggregate) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(Aggregate other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Aggregate.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasI) {
-          I = other.I;
-        }
-        if (other.HasS) {
-          S = other.S;
-        }
-        if (other.HasSub) {
-          MergeSub(other.Sub);
-        }
-        if (other.HasFile) {
-          MergeFile(other.File);
-        }
-        if (other.HasMset) {
-          MergeMset(other.Mset);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_aggregateFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _aggregateFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasI = input.ReadInt32(ref result.i_);
-              break;
-            }
-            case 18: {
-              result.hasS = input.ReadString(ref result.s_);
-              break;
-            }
-            case 26: {
-              global::Google.ProtocolBuffers.TestProtos.Aggregate.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.Aggregate.CreateBuilder();
-              if (result.hasSub) {
-                subBuilder.MergeFrom(Sub);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Sub = subBuilder.BuildPartial();
-              break;
-            }
-            case 34: {
-              global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder();
-              if (result.hasFile) {
-                subBuilder.MergeFrom(File);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              File = subBuilder.BuildPartial();
-              break;
-            }
-            case 42: {
-              global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.CreateBuilder();
-              if (result.hasMset) {
-                subBuilder.MergeFrom(Mset);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Mset = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasI {
-        get { return result.hasI; }
-      }
-      public int I {
-        get { return result.I; }
-        set { SetI(value); }
-      }
-      public Builder SetI(int value) {
-        PrepareBuilder();
-        result.hasI = true;
-        result.i_ = value;
-        return this;
-      }
-      public Builder ClearI() {
-        PrepareBuilder();
-        result.hasI = false;
-        result.i_ = 0;
-        return this;
-      }
-
-      public bool HasS {
-        get { return result.hasS; }
-      }
-      public string S {
-        get { return result.S; }
-        set { SetS(value); }
-      }
-      public Builder SetS(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasS = true;
-        result.s_ = value;
-        return this;
-      }
-      public Builder ClearS() {
-        PrepareBuilder();
-        result.hasS = false;
-        result.s_ = "";
-        return this;
-      }
-
-      public bool HasSub {
-       get { return result.hasSub; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Aggregate Sub {
-        get { return result.Sub; }
-        set { SetSub(value); }
-      }
-      public Builder SetSub(global::Google.ProtocolBuffers.TestProtos.Aggregate value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasSub = true;
-        result.sub_ = value;
-        return this;
-      }
-      public Builder SetSub(global::Google.ProtocolBuffers.TestProtos.Aggregate.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasSub = true;
-        result.sub_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeSub(global::Google.ProtocolBuffers.TestProtos.Aggregate value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasSub &&
-            result.sub_ != global::Google.ProtocolBuffers.TestProtos.Aggregate.DefaultInstance) {
-            result.sub_ = global::Google.ProtocolBuffers.TestProtos.Aggregate.CreateBuilder(result.sub_).MergeFrom(value).BuildPartial();
-        } else {
-          result.sub_ = value;
-        }
-        result.hasSub = true;
-        return this;
-      }
-      public Builder ClearSub() {
-        PrepareBuilder();
-        result.hasSub = false;
-        result.sub_ = null;
-        return this;
-      }
-
-      public bool HasFile {
-       get { return result.hasFile; }
-      }
-      public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions File {
-        get { return result.File; }
-        set { SetFile(value); }
-      }
-      public Builder SetFile(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasFile = true;
-        result.file_ = value;
-        return this;
-      }
-      public Builder SetFile(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasFile = true;
-        result.file_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeFile(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasFile &&
-            result.file_ != global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) {
-            result.file_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder(result.file_).MergeFrom(value).BuildPartial();
-        } else {
-          result.file_ = value;
-        }
-        result.hasFile = true;
-        return this;
-      }
-      public Builder ClearFile() {
-        PrepareBuilder();
-        result.hasFile = false;
-        result.file_ = null;
-        return this;
-      }
-
-      public bool HasMset {
-       get { return result.hasMset; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet Mset {
-        get { return result.Mset; }
-        set { SetMset(value); }
-      }
-      public Builder SetMset(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasMset = true;
-        result.mset_ = value;
-        return this;
-      }
-      public Builder SetMset(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasMset = true;
-        result.mset_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeMset(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasMset &&
-            result.mset_ != global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.DefaultInstance) {
-            result.mset_ = global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.CreateBuilder(result.mset_).MergeFrom(value).BuildPartial();
-        } else {
-          result.mset_ = value;
-        }
-        result.hasMset = true;
-        return this;
-      }
-      public Builder ClearMset() {
-        PrepareBuilder();
-        result.hasMset = false;
-        result.mset_ = null;
-        return this;
-      }
-    }
-    static Aggregate() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class AggregateMessage : pb::GeneratedMessage<AggregateMessage, AggregateMessage.Builder> {
-    private AggregateMessage() { }
-    private static readonly AggregateMessage defaultInstance = new AggregateMessage().MakeReadOnly();
-    private static readonly string[] _aggregateMessageFieldNames = new string[] { "fieldname" };
-    private static readonly uint[] _aggregateMessageFieldTags = new uint[] { 8 };
-    public static AggregateMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override AggregateMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override AggregateMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_AggregateMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<AggregateMessage, AggregateMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_AggregateMessage__FieldAccessorTable; }
-    }
-
-    public const int FieldnameFieldNumber = 1;
-    private bool hasFieldname;
-    private int fieldname_;
-    public bool HasFieldname {
-      get { return hasFieldname; }
-    }
-    public int Fieldname {
-      get { return fieldname_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _aggregateMessageFieldNames;
-      if (hasFieldname) {
-        output.WriteInt32(1, field_names[0], Fieldname);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasFieldname) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Fieldname);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static AggregateMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static AggregateMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static AggregateMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static AggregateMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static AggregateMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static AggregateMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static AggregateMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static AggregateMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private AggregateMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(AggregateMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<AggregateMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(AggregateMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private AggregateMessage result;
-
-      private AggregateMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          AggregateMessage original = result;
-          result = new AggregateMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override AggregateMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessage.Descriptor; }
-      }
-
-      public override AggregateMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessage.DefaultInstance; }
-      }
-
-      public override AggregateMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is AggregateMessage) {
-          return MergeFrom((AggregateMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(AggregateMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.AggregateMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasFieldname) {
-          Fieldname = other.Fieldname;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_aggregateMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _aggregateMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasFieldname = input.ReadInt32(ref result.fieldname_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasFieldname {
-        get { return result.hasFieldname; }
-      }
-      public int Fieldname {
-        get { return result.Fieldname; }
-        set { SetFieldname(value); }
-      }
-      public Builder SetFieldname(int value) {
-        PrepareBuilder();
-        result.hasFieldname = true;
-        result.fieldname_ = value;
-        return this;
-      }
-      public Builder ClearFieldname() {
-        PrepareBuilder();
-        result.hasFieldname = false;
-        result.fieldname_ = 0;
-        return this;
-      }
-    }
-    static AggregateMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class NestedOptionType : pb::GeneratedMessage<NestedOptionType, NestedOptionType.Builder> {
-    private NestedOptionType() { }
-    private static readonly NestedOptionType defaultInstance = new NestedOptionType().MakeReadOnly();
-    private static readonly string[] _nestedOptionTypeFieldNames = new string[] {  };
-    private static readonly uint[] _nestedOptionTypeFieldTags = new uint[] {  };
-    public static NestedOptionType DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override NestedOptionType DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override NestedOptionType ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_NestedOptionType__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<NestedOptionType, NestedOptionType.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_NestedOptionType__FieldAccessorTable; }
-    }
-
-    public const int NestedExtensionFieldNumber = 7912573;
-    public static pb::GeneratedExtensionBase<int> NestedExtension;
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum NestedEnum {
-        NESTED_ENUM_VALUE = 1,
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {
-        private NestedMessage() { }
-        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();
-        private static readonly string[] _nestedMessageFieldNames = new string[] { "nested_field" };
-        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8 };
-        public static NestedMessage DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override NestedMessage DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override NestedMessage ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_NestedOptionType_NestedMessage__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.internal__static_protobuf_unittest_NestedOptionType_NestedMessage__FieldAccessorTable; }
-        }
-
-        public const int NestedFieldFieldNumber = 1;
-        private bool hasNestedField;
-        private int nestedField_;
-        public bool HasNestedField {
-          get { return hasNestedField; }
-        }
-        public int NestedField {
-          get { return nestedField_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _nestedMessageFieldNames;
-          if (hasNestedField) {
-            output.WriteInt32(1, field_names[0], NestedField);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasNestedField) {
-            size += pb::CodedOutputStream.ComputeInt32Size(1, NestedField);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private NestedMessage MakeReadOnly() {
-          return this;
-        }
-
-        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(NestedMessage prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(NestedMessage cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private NestedMessage result;
-
-          private NestedMessage PrepareBuilder() {
-            if (resultIsReadOnly) {
-              NestedMessage original = result;
-              result = new NestedMessage();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override NestedMessage MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Types.NestedMessage.Descriptor; }
-          }
-
-          public override NestedMessage DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Types.NestedMessage.DefaultInstance; }
-          }
-
-          public override NestedMessage BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is NestedMessage) {
-              return MergeFrom((NestedMessage) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(NestedMessage other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Types.NestedMessage.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasNestedField) {
-              NestedField = other.NestedField;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _nestedMessageFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 8: {
-                  result.hasNestedField = input.ReadInt32(ref result.nestedField_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasNestedField {
-            get { return result.hasNestedField; }
-          }
-          public int NestedField {
-            get { return result.NestedField; }
-            set { SetNestedField(value); }
-          }
-          public Builder SetNestedField(int value) {
-            PrepareBuilder();
-            result.hasNestedField = true;
-            result.nestedField_ = value;
-            return this;
-          }
-          public Builder ClearNestedField() {
-            PrepareBuilder();
-            result.hasNestedField = false;
-            result.nestedField_ = 0;
-            return this;
-          }
-        }
-        static NestedMessage() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _nestedOptionTypeFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static NestedOptionType ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static NestedOptionType ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static NestedOptionType ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static NestedOptionType ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static NestedOptionType ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static NestedOptionType ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static NestedOptionType ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static NestedOptionType ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static NestedOptionType ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static NestedOptionType ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private NestedOptionType MakeReadOnly() {
-      return this;
-    }
-
-    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(NestedOptionType prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<NestedOptionType, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(NestedOptionType cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private NestedOptionType result;
-
-      private NestedOptionType PrepareBuilder() {
-        if (resultIsReadOnly) {
-          NestedOptionType original = result;
-          result = new NestedOptionType();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override NestedOptionType MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.NestedOptionType.Descriptor; }
-      }
-
-      public override NestedOptionType DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.NestedOptionType.DefaultInstance; }
-      }
-
-      public override NestedOptionType BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is NestedOptionType) {
-          return MergeFrom((NestedOptionType) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(NestedOptionType other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.NestedOptionType.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_nestedOptionTypeFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _nestedOptionTypeFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static NestedOptionType() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestCustomOptions.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 0 - 732
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestDropUnknownFields.cs

@@ -1,732 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unittest_drop_unknown_fields.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnittestDropUnknownFields {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_unittest_drop_unknown_fields_Foo__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Foo, global::Google.ProtocolBuffers.TestProtos.Foo.Builder> internal__static_unittest_drop_unknown_fields_Foo__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_unittest_drop_unknown_fields_FooWithExtraFields__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields, global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Builder> internal__static_unittest_drop_unknown_fields_FooWithExtraFields__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnittestDropUnknownFields() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "CjJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZHJvcF91bmtub3duX2ZpZWxk", 
-            "cy5wcm90bxIcdW5pdHRlc3RfZHJvcF91bmtub3duX2ZpZWxkcyKFAQoDRm9v", 
-            "EhMKC2ludDMyX3ZhbHVlGAEgASgFEkAKCmVudW1fdmFsdWUYAiABKA4yLC51", 
-            "bml0dGVzdF9kcm9wX3Vua25vd25fZmllbGRzLkZvby5OZXN0ZWRFbnVtIicK", 
-            "Ck5lc3RlZEVudW0SBwoDRk9PEAASBwoDQkFSEAESBwoDQkFaEAIixwEKEkZv", 
-            "b1dpdGhFeHRyYUZpZWxkcxITCgtpbnQzMl92YWx1ZRgBIAEoBRJPCgplbnVt", 
-            "X3ZhbHVlGAIgASgOMjsudW5pdHRlc3RfZHJvcF91bmtub3duX2ZpZWxkcy5G", 
-            "b29XaXRoRXh0cmFGaWVsZHMuTmVzdGVkRW51bRIZChFleHRyYV9pbnQzMl92", 
-            "YWx1ZRgDIAEoBSIwCgpOZXN0ZWRFbnVtEgcKA0ZPTxAAEgcKA0JBUhABEgcK", 
-            "A0JBWhACEgcKA1FVWBADQjOiAgxEcm9wVW5rbm93bnOqAiFHb29nbGUuUHJv", 
-          "dG9jb2xCdWZmZXJzLlRlc3RQcm90b3NiBnByb3RvMw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_unittest_drop_unknown_fields_Foo__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_unittest_drop_unknown_fields_Foo__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Foo, global::Google.ProtocolBuffers.TestProtos.Foo.Builder>(internal__static_unittest_drop_unknown_fields_Foo__Descriptor,
-                new string[] { "Int32Value", "EnumValue", });
-        internal__static_unittest_drop_unknown_fields_FooWithExtraFields__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_unittest_drop_unknown_fields_FooWithExtraFields__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields, global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Builder>(internal__static_unittest_drop_unknown_fields_FooWithExtraFields__Descriptor,
-                new string[] { "Int32Value", "EnumValue", "ExtraInt32Value", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class Foo : pb::GeneratedMessage<Foo, Foo.Builder> {
-    private Foo() { }
-    private static readonly Foo defaultInstance = new Foo().MakeReadOnly();
-    private static readonly string[] _fooFieldNames = new string[] { "enum_value", "int32_value" };
-    private static readonly uint[] _fooFieldTags = new uint[] { 16, 8 };
-    public static Foo DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override Foo DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override Foo ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestDropUnknownFields.internal__static_unittest_drop_unknown_fields_Foo__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<Foo, Foo.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestDropUnknownFields.internal__static_unittest_drop_unknown_fields_Foo__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum NestedEnum {
-        FOO = 0,
-        BAR = 1,
-        BAZ = 2,
-      }
-
-    }
-    #endregion
-
-    public const int Int32ValueFieldNumber = 1;
-    private int int32Value_;
-    public int Int32Value {
-      get { return int32Value_; }
-    }
-
-    public const int EnumValueFieldNumber = 2;
-    private global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum enumValue_ = global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum.FOO;
-    public global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum EnumValue {
-      get { return enumValue_; }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _fooFieldNames;
-      if (Int32Value != 0) {
-        output.WriteInt32(1, field_names[1], Int32Value);
-      }
-      if (EnumValue != global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum.FOO) {
-        output.WriteEnum(2, field_names[0], (int) EnumValue, EnumValue);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (Int32Value != 0) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Int32Value);
-      }
-      if (EnumValue != global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum.FOO) {
-        size += pb::CodedOutputStream.ComputeEnumSize(2, (int) EnumValue);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static Foo ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Foo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Foo ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static Foo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static Foo ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Foo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static Foo ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static Foo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static Foo ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static Foo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private Foo MakeReadOnly() {
-      return this;
-    }
-
-    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(Foo prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<Foo, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(Foo cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private Foo result;
-
-      private Foo PrepareBuilder() {
-        if (resultIsReadOnly) {
-          Foo original = result;
-          result = new Foo();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override Foo MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Foo.Descriptor; }
-      }
-
-      public override Foo DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Foo.DefaultInstance; }
-      }
-
-      public override Foo BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is Foo) {
-          return MergeFrom((Foo) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(Foo other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Foo.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.Int32Value != 0) {
-          Int32Value = other.Int32Value;
-        }
-        if (other.EnumValue != global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum.FOO) {
-          EnumValue = other.EnumValue;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fooFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fooFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              input.ReadInt32(ref result.int32Value_);
-              break;
-            }
-            case 16: {
-              object unknown;
-              if(input.ReadEnum(ref result.enumValue_, out unknown)) {
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(2, (ulong)(int)unknown);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public int Int32Value {
-        get { return result.Int32Value; }
-        set { SetInt32Value(value); }
-      }
-      public Builder SetInt32Value(int value) {
-        PrepareBuilder();
-        result.int32Value_ = value;
-        return this;
-      }
-      public Builder ClearInt32Value() {
-        PrepareBuilder();
-        result.int32Value_ = 0;
-        return this;
-      }
-
-      public global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum EnumValue {
-        get { return result.EnumValue; }
-        set { SetEnumValue(value); }
-      }
-      public Builder SetEnumValue(global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.enumValue_ = value;
-        return this;
-      }
-      public Builder ClearEnumValue() {
-        PrepareBuilder();
-        result.enumValue_ = global::Google.ProtocolBuffers.TestProtos.Foo.Types.NestedEnum.FOO;
-        return this;
-      }
-    }
-    static Foo() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestDropUnknownFields.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class FooWithExtraFields : pb::GeneratedMessage<FooWithExtraFields, FooWithExtraFields.Builder> {
-    private FooWithExtraFields() { }
-    private static readonly FooWithExtraFields defaultInstance = new FooWithExtraFields().MakeReadOnly();
-    private static readonly string[] _fooWithExtraFieldsFieldNames = new string[] { "enum_value", "extra_int32_value", "int32_value" };
-    private static readonly uint[] _fooWithExtraFieldsFieldTags = new uint[] { 16, 24, 8 };
-    public static FooWithExtraFields DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override FooWithExtraFields DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override FooWithExtraFields ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestDropUnknownFields.internal__static_unittest_drop_unknown_fields_FooWithExtraFields__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<FooWithExtraFields, FooWithExtraFields.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestDropUnknownFields.internal__static_unittest_drop_unknown_fields_FooWithExtraFields__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum NestedEnum {
-        FOO = 0,
-        BAR = 1,
-        BAZ = 2,
-        QUX = 3,
-      }
-
-    }
-    #endregion
-
-    public const int Int32ValueFieldNumber = 1;
-    private int int32Value_;
-    public int Int32Value {
-      get { return int32Value_; }
-    }
-
-    public const int EnumValueFieldNumber = 2;
-    private global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum enumValue_ = global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum.FOO;
-    public global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum EnumValue {
-      get { return enumValue_; }
-    }
-
-    public const int ExtraInt32ValueFieldNumber = 3;
-    private int extraInt32Value_;
-    public int ExtraInt32Value {
-      get { return extraInt32Value_; }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _fooWithExtraFieldsFieldNames;
-      if (Int32Value != 0) {
-        output.WriteInt32(1, field_names[2], Int32Value);
-      }
-      if (EnumValue != global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum.FOO) {
-        output.WriteEnum(2, field_names[0], (int) EnumValue, EnumValue);
-      }
-      if (ExtraInt32Value != 0) {
-        output.WriteInt32(3, field_names[1], ExtraInt32Value);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (Int32Value != 0) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Int32Value);
-      }
-      if (EnumValue != global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum.FOO) {
-        size += pb::CodedOutputStream.ComputeEnumSize(2, (int) EnumValue);
-      }
-      if (ExtraInt32Value != 0) {
-        size += pb::CodedOutputStream.ComputeInt32Size(3, ExtraInt32Value);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static FooWithExtraFields ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooWithExtraFields ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooWithExtraFields ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static FooWithExtraFields ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static FooWithExtraFields ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooWithExtraFields ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static FooWithExtraFields ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static FooWithExtraFields ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static FooWithExtraFields ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static FooWithExtraFields ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private FooWithExtraFields MakeReadOnly() {
-      return this;
-    }
-
-    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(FooWithExtraFields prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<FooWithExtraFields, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(FooWithExtraFields cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private FooWithExtraFields result;
-
-      private FooWithExtraFields PrepareBuilder() {
-        if (resultIsReadOnly) {
-          FooWithExtraFields original = result;
-          result = new FooWithExtraFields();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override FooWithExtraFields MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Descriptor; }
-      }
-
-      public override FooWithExtraFields DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.DefaultInstance; }
-      }
-
-      public override FooWithExtraFields BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is FooWithExtraFields) {
-          return MergeFrom((FooWithExtraFields) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(FooWithExtraFields other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.Int32Value != 0) {
-          Int32Value = other.Int32Value;
-        }
-        if (other.EnumValue != global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum.FOO) {
-          EnumValue = other.EnumValue;
-        }
-        if (other.ExtraInt32Value != 0) {
-          ExtraInt32Value = other.ExtraInt32Value;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_fooWithExtraFieldsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _fooWithExtraFieldsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              input.ReadInt32(ref result.int32Value_);
-              break;
-            }
-            case 16: {
-              object unknown;
-              if(input.ReadEnum(ref result.enumValue_, out unknown)) {
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(2, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 24: {
-              input.ReadInt32(ref result.extraInt32Value_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public int Int32Value {
-        get { return result.Int32Value; }
-        set { SetInt32Value(value); }
-      }
-      public Builder SetInt32Value(int value) {
-        PrepareBuilder();
-        result.int32Value_ = value;
-        return this;
-      }
-      public Builder ClearInt32Value() {
-        PrepareBuilder();
-        result.int32Value_ = 0;
-        return this;
-      }
-
-      public global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum EnumValue {
-        get { return result.EnumValue; }
-        set { SetEnumValue(value); }
-      }
-      public Builder SetEnumValue(global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.enumValue_ = value;
-        return this;
-      }
-      public Builder ClearEnumValue() {
-        PrepareBuilder();
-        result.enumValue_ = global::Google.ProtocolBuffers.TestProtos.FooWithExtraFields.Types.NestedEnum.FOO;
-        return this;
-      }
-
-      public int ExtraInt32Value {
-        get { return result.ExtraInt32Value; }
-        set { SetExtraInt32Value(value); }
-      }
-      public Builder SetExtraInt32Value(int value) {
-        PrepareBuilder();
-        result.extraInt32Value_ = value;
-        return this;
-      }
-      public Builder ClearExtraInt32Value() {
-        PrepareBuilder();
-        result.extraInt32Value_ = 0;
-        return this;
-      }
-    }
-    static FooWithExtraFields() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestDropUnknownFields.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

Разница между файлами не показана из-за своего большого размера
+ 0 - 5035
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestEnormousDescriptor.cs


+ 0 - 2277
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestExtrasXmltest.cs

@@ -1,2277 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: unittest_extras_xmltest.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnittestExtrasXmltest {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.ExtensionEnum);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.ExtensionText);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.ExtensionNumber);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.ExtensionMessage);
-    }
-    #endregion
-    #region Extensions
-    public const int ExtensionEnumFieldNumber = 101;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.EnumOptions> ExtensionEnum;
-    public const int ExtensionTextFieldNumber = 102;
-    public static pb::GeneratedExtensionBase<string> ExtensionText;
-    public const int ExtensionNumberFieldNumber = 103;
-    public static pb::GeneratedExtensionBase<scg::IList<int>> ExtensionNumber;
-    public const int ExtensionMessageFieldNumber = 199;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestXmlExtension> ExtensionMessage;
-    #endregion
-
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlChild__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlChild, global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder> internal__static_protobuf_unittest_extra_TestXmlChild__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlNoFields__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields, global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.Builder> internal__static_protobuf_unittest_extra_TestXmlNoFields__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlRescursive__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive, global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Builder> internal__static_protobuf_unittest_extra_TestXmlRescursive__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Builder> internal__static_protobuf_unittest_extra_TestXmlMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlMessage_Children__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder> internal__static_protobuf_unittest_extra_TestXmlMessage_Children__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlExtension__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlExtension, global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.Builder> internal__static_protobuf_unittest_extra_TestXmlExtension__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnittestExtrasXmltest() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "Ch11bml0dGVzdF9leHRyYXNfeG1sdGVzdC5wcm90bxIXcHJvdG9idWZfdW5p", 
-            "dHRlc3RfZXh0cmEiVQoMVGVzdFhtbENoaWxkEjUKB29wdGlvbnMYAyADKA4y", 
-            "JC5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5FbnVtT3B0aW9ucxIOCgZiaW5h", 
-            "cnkYBCABKAwiEQoPVGVzdFhtbE5vRmllbGRzIk4KEVRlc3RYbWxSZXNjdXJz", 
-            "aXZlEjkKBWNoaWxkGAEgASgLMioucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEu", 
-            "VGVzdFhtbFJlc2N1cnNpdmUitwIKDlRlc3RYbWxNZXNzYWdlEg4KBm51bWJl", 
-            "chgGIAEoAxIPCgdudW1iZXJzGAIgAygFEgwKBHRleHQYAyABKAkSEgoJdGV4", 
-            "dGxpbmVzGLwFIAMoCRINCgV2YWxpZBgFIAEoCBI0CgVjaGlsZBgBIAEoCzIl", 
-            "LnByb3RvYnVmX3VuaXR0ZXN0X2V4dHJhLlRlc3RYbWxDaGlsZBJDCghjaGls", 
-            "ZHJlbhiRAyADKAoyMC5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0WG1s", 
-            "TWVzc2FnZS5DaGlsZHJlbhpRCghDaGlsZHJlbhI1CgdvcHRpb25zGAMgAygO", 
-            "MiQucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuRW51bU9wdGlvbnMSDgoGYmlu", 
-            "YXJ5GAQgASgMKgUIZBDIASIiChBUZXN0WG1sRXh0ZW5zaW9uEg4KBm51bWJl", 
-            "chgBIAIoBSoqCgtFbnVtT3B0aW9ucxIHCgNPTkUQABIHCgNUV08QARIJCgVU", 
-            "SFJFRRACOmUKDmV4dGVuc2lvbl9lbnVtEicucHJvdG9idWZfdW5pdHRlc3Rf", 
-            "ZXh0cmEuVGVzdFhtbE1lc3NhZ2UYZSABKA4yJC5wcm90b2J1Zl91bml0dGVz", 
-            "dF9leHRyYS5FbnVtT3B0aW9uczo/Cg5leHRlbnNpb25fdGV4dBInLnByb3Rv", 
-            "YnVmX3VuaXR0ZXN0X2V4dHJhLlRlc3RYbWxNZXNzYWdlGGYgASgJOkUKEGV4", 
-            "dGVuc2lvbl9udW1iZXISJy5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0", 
-            "WG1sTWVzc2FnZRhnIAMoBUICEAE6bgoRZXh0ZW5zaW9uX21lc3NhZ2USJy5w", 
-            "cm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0WG1sTWVzc2FnZRjHASABKAsy", 
-            "KS5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0WG1sRXh0ZW5zaW9uQiZI", 
-          "AaoCIUdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVzdFByb3Rvcw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_extra_TestXmlChild__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_extra_TestXmlChild__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlChild, global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder>(internal__static_protobuf_unittest_extra_TestXmlChild__Descriptor,
-                new string[] { "Options", "Binary", });
-        internal__static_protobuf_unittest_extra_TestXmlNoFields__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_protobuf_unittest_extra_TestXmlNoFields__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields, global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.Builder>(internal__static_protobuf_unittest_extra_TestXmlNoFields__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_extra_TestXmlRescursive__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_protobuf_unittest_extra_TestXmlRescursive__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive, global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Builder>(internal__static_protobuf_unittest_extra_TestXmlRescursive__Descriptor,
-                new string[] { "Child", });
-        internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_protobuf_unittest_extra_TestXmlMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Builder>(internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor,
-                new string[] { "Number", "Numbers", "Text", "Textlines", "Valid", "Child", "Children", });
-        internal__static_protobuf_unittest_extra_TestXmlMessage_Children__Descriptor = internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_extra_TestXmlMessage_Children__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder>(internal__static_protobuf_unittest_extra_TestXmlMessage_Children__Descriptor,
-                new string[] { "Options", "Binary", });
-        internal__static_protobuf_unittest_extra_TestXmlExtension__Descriptor = Descriptor.MessageTypes[4];
-        internal__static_protobuf_unittest_extra_TestXmlExtension__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlExtension, global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.Builder>(internal__static_protobuf_unittest_extra_TestXmlExtension__Descriptor,
-                new string[] { "Number", });
-        global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.ExtensionEnum = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.EnumOptions>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.ExtensionText = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor.Extensions[1]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.ExtensionNumber = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor.Extensions[2]);
-        global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.ExtensionMessage = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestXmlExtension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor.Extensions[3]);
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Enums
-  public enum EnumOptions {
-    ONE = 0,
-    TWO = 1,
-    THREE = 2,
-  }
-
-  #endregion
-
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestXmlChild : pb::GeneratedMessage<TestXmlChild, TestXmlChild.Builder> {
-    private TestXmlChild() { }
-    private static readonly TestXmlChild defaultInstance = new TestXmlChild().MakeReadOnly();
-    private static readonly string[] _testXmlChildFieldNames = new string[] { "binary", "options" };
-    private static readonly uint[] _testXmlChildFieldTags = new uint[] { 34, 24 };
-    public static TestXmlChild DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestXmlChild DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestXmlChild ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlChild__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestXmlChild, TestXmlChild.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlChild__FieldAccessorTable; }
-    }
-
-    public const int OptionsFieldNumber = 3;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> options_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {
-      get { return pbc::Lists.AsReadOnly(options_); }
-    }
-    public int OptionsCount {
-      get { return options_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.EnumOptions GetOptions(int index) {
-      return options_[index];
-    }
-
-    public const int BinaryFieldNumber = 4;
-    private bool hasBinary;
-    private pb::ByteString binary_ = pb::ByteString.Empty;
-    public bool HasBinary {
-      get { return hasBinary; }
-    }
-    public pb::ByteString Binary {
-      get { return binary_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testXmlChildFieldNames;
-      if (options_.Count > 0) {
-        output.WriteEnumArray(3, field_names[1], options_);
-      }
-      if (hasBinary) {
-        output.WriteBytes(4, field_names[0], Binary);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      {
-        int dataSize = 0;
-        if (options_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.EnumOptions element in options_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 1 * options_.Count;
-        }
-      }
-      if (hasBinary) {
-        size += pb::CodedOutputStream.ComputeBytesSize(4, Binary);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestXmlChild ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlChild ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlChild ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlChild ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlChild ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlChild ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlChild ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestXmlChild ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestXmlChild ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlChild ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestXmlChild MakeReadOnly() {
-      options_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestXmlChild prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlChild, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestXmlChild cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestXmlChild result;
-
-      private TestXmlChild PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestXmlChild original = result;
-          result = new TestXmlChild();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestXmlChild MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Descriptor; }
-      }
-
-      public override TestXmlChild DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance; }
-      }
-
-      public override TestXmlChild BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestXmlChild) {
-          return MergeFrom((TestXmlChild) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestXmlChild other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.options_.Count != 0) {
-          result.options_.Add(other.options_);
-        }
-        if (other.HasBinary) {
-          Binary = other.Binary;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testXmlChildFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testXmlChildFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 26:
-            case 24: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.EnumOptions>(tag, field_name, result.options_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(3, (ulong)(int)rawValue);
-              }
-              break;
-            }
-            case 34: {
-              result.hasBinary = input.ReadBytes(ref result.binary_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {
-        get { return PrepareBuilder().options_; }
-      }
-      public int OptionsCount {
-        get { return result.OptionsCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.EnumOptions GetOptions(int index) {
-        return result.GetOptions(index);
-      }
-      public Builder SetOptions(int index, global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {
-        PrepareBuilder();
-        result.options_[index] = value;
-        return this;
-      }
-      public Builder AddOptions(global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {
-        PrepareBuilder();
-        result.options_.Add(value);
-        return this;
-      }
-      public Builder AddRangeOptions(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.EnumOptions> values) {
-        PrepareBuilder();
-        result.options_.Add(values);
-        return this;
-      }
-      public Builder ClearOptions() {
-        PrepareBuilder();
-        result.options_.Clear();
-        return this;
-      }
-
-      public bool HasBinary {
-        get { return result.hasBinary; }
-      }
-      public pb::ByteString Binary {
-        get { return result.Binary; }
-        set { SetBinary(value); }
-      }
-      public Builder SetBinary(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasBinary = true;
-        result.binary_ = value;
-        return this;
-      }
-      public Builder ClearBinary() {
-        PrepareBuilder();
-        result.hasBinary = false;
-        result.binary_ = pb::ByteString.Empty;
-        return this;
-      }
-    }
-    static TestXmlChild() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestXmlNoFields : pb::GeneratedMessage<TestXmlNoFields, TestXmlNoFields.Builder> {
-    private TestXmlNoFields() { }
-    private static readonly TestXmlNoFields defaultInstance = new TestXmlNoFields().MakeReadOnly();
-    private static readonly string[] _testXmlNoFieldsFieldNames = new string[] {  };
-    private static readonly uint[] _testXmlNoFieldsFieldTags = new uint[] {  };
-    public static TestXmlNoFields DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestXmlNoFields DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestXmlNoFields ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlNoFields__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestXmlNoFields, TestXmlNoFields.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlNoFields__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testXmlNoFieldsFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestXmlNoFields ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlNoFields ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlNoFields ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlNoFields ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlNoFields ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlNoFields ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlNoFields ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestXmlNoFields ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestXmlNoFields ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlNoFields ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestXmlNoFields MakeReadOnly() {
-      return this;
-    }
-
-    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(TestXmlNoFields prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlNoFields, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestXmlNoFields cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestXmlNoFields result;
-
-      private TestXmlNoFields PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestXmlNoFields original = result;
-          result = new TestXmlNoFields();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestXmlNoFields MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.Descriptor; }
-      }
-
-      public override TestXmlNoFields DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.DefaultInstance; }
-      }
-
-      public override TestXmlNoFields BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestXmlNoFields) {
-          return MergeFrom((TestXmlNoFields) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestXmlNoFields other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testXmlNoFieldsFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testXmlNoFieldsFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestXmlNoFields() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestXmlRescursive : pb::GeneratedMessage<TestXmlRescursive, TestXmlRescursive.Builder> {
-    private TestXmlRescursive() { }
-    private static readonly TestXmlRescursive defaultInstance = new TestXmlRescursive().MakeReadOnly();
-    private static readonly string[] _testXmlRescursiveFieldNames = new string[] { "child" };
-    private static readonly uint[] _testXmlRescursiveFieldTags = new uint[] { 10 };
-    public static TestXmlRescursive DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestXmlRescursive DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestXmlRescursive ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlRescursive__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestXmlRescursive, TestXmlRescursive.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlRescursive__FieldAccessorTable; }
-    }
-
-    public const int ChildFieldNumber = 1;
-    private bool hasChild;
-    private global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive child_;
-    public bool HasChild {
-      get { return hasChild; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive Child {
-      get { return child_ ?? global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testXmlRescursiveFieldNames;
-      if (hasChild) {
-        output.WriteMessage(1, field_names[0], Child);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasChild) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, Child);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestXmlRescursive ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlRescursive ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlRescursive ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlRescursive ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlRescursive ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlRescursive ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlRescursive ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestXmlRescursive ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestXmlRescursive ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlRescursive ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestXmlRescursive MakeReadOnly() {
-      return this;
-    }
-
-    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(TestXmlRescursive prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlRescursive, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestXmlRescursive cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestXmlRescursive result;
-
-      private TestXmlRescursive PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestXmlRescursive original = result;
-          result = new TestXmlRescursive();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestXmlRescursive MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Descriptor; }
-      }
-
-      public override TestXmlRescursive DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.DefaultInstance; }
-      }
-
-      public override TestXmlRescursive BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestXmlRescursive) {
-          return MergeFrom((TestXmlRescursive) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestXmlRescursive other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasChild) {
-          MergeChild(other.Child);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testXmlRescursiveFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testXmlRescursiveFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.CreateBuilder();
-              if (result.hasChild) {
-                subBuilder.MergeFrom(Child);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Child = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasChild {
-       get { return result.hasChild; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive Child {
-        get { return result.Child; }
-        set { SetChild(value); }
-      }
-      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasChild = true;
-        result.child_ = value;
-        return this;
-      }
-      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasChild = true;
-        result.child_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeChild(global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasChild &&
-            result.child_ != global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.DefaultInstance) {
-            result.child_ = global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.CreateBuilder(result.child_).MergeFrom(value).BuildPartial();
-        } else {
-          result.child_ = value;
-        }
-        result.hasChild = true;
-        return this;
-      }
-      public Builder ClearChild() {
-        PrepareBuilder();
-        result.hasChild = false;
-        result.child_ = null;
-        return this;
-      }
-    }
-    static TestXmlRescursive() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestXmlMessage : pb::ExtendableMessage<TestXmlMessage, TestXmlMessage.Builder> {
-    private TestXmlMessage() { }
-    private static readonly TestXmlMessage defaultInstance = new TestXmlMessage().MakeReadOnly();
-    private static readonly string[] _testXmlMessageFieldNames = new string[] { "child", "children", "number", "numbers", "text", "textlines", "valid" };
-    private static readonly uint[] _testXmlMessageFieldTags = new uint[] { 10, 3211, 48, 16, 26, 5602, 40 };
-    public static TestXmlMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestXmlMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestXmlMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestXmlMessage, TestXmlMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlMessage__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Children : pb::GeneratedMessage<Children, Children.Builder> {
-        private Children() { }
-        private static readonly Children defaultInstance = new Children().MakeReadOnly();
-        private static readonly string[] _childrenFieldNames = new string[] { "binary", "options" };
-        private static readonly uint[] _childrenFieldTags = new uint[] { 34, 24 };
-        public static Children DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override Children DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override Children ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlMessage_Children__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<Children, Children.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlMessage_Children__FieldAccessorTable; }
-        }
-
-        public const int OptionsFieldNumber = 3;
-        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> options_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions>();
-        public scg::IList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {
-          get { return pbc::Lists.AsReadOnly(options_); }
-        }
-        public int OptionsCount {
-          get { return options_.Count; }
-        }
-        public global::Google.ProtocolBuffers.TestProtos.EnumOptions GetOptions(int index) {
-          return options_[index];
-        }
-
-        public const int BinaryFieldNumber = 4;
-        private bool hasBinary;
-        private pb::ByteString binary_ = pb::ByteString.Empty;
-        public bool HasBinary {
-          get { return hasBinary; }
-        }
-        public pb::ByteString Binary {
-          get { return binary_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _childrenFieldNames;
-          if (options_.Count > 0) {
-            output.WriteEnumArray(3, field_names[1], options_);
-          }
-          if (hasBinary) {
-            output.WriteBytes(4, field_names[0], Binary);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          {
-            int dataSize = 0;
-            if (options_.Count > 0) {
-              foreach (global::Google.ProtocolBuffers.TestProtos.EnumOptions element in options_) {
-                dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-              }
-              size += dataSize;
-              size += 1 * options_.Count;
-            }
-          }
-          if (hasBinary) {
-            size += pb::CodedOutputStream.ComputeBytesSize(4, Binary);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static Children ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Children ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Children ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Children ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Children ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Children ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static Children ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static Children ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static Children ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Children ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private Children MakeReadOnly() {
-          options_.MakeReadOnly();
-          return this;
-        }
-
-        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(Children prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<Children, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(Children cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private Children result;
-
-          private Children PrepareBuilder() {
-            if (resultIsReadOnly) {
-              Children original = result;
-              result = new Children();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override Children MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Descriptor; }
-          }
-
-          public override Children DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.DefaultInstance; }
-          }
-
-          public override Children BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is Children) {
-              return MergeFrom((Children) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(Children other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.options_.Count != 0) {
-              result.options_.Add(other.options_);
-            }
-            if (other.HasBinary) {
-              Binary = other.Binary;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_childrenFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _childrenFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 26:
-                case 24: {
-                  scg::ICollection<object> unknownItems;
-                  input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.EnumOptions>(tag, field_name, result.options_, out unknownItems);
-                  if (unknownItems != null) {
-                    if (unknownFields == null) {
-                      unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                    }
-                    foreach (object rawValue in unknownItems)
-                      if (rawValue is int)
-                        unknownFields.MergeVarintField(3, (ulong)(int)rawValue);
-                  }
-                  break;
-                }
-                case 34: {
-                  result.hasBinary = input.ReadBytes(ref result.binary_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {
-            get { return PrepareBuilder().options_; }
-          }
-          public int OptionsCount {
-            get { return result.OptionsCount; }
-          }
-          public global::Google.ProtocolBuffers.TestProtos.EnumOptions GetOptions(int index) {
-            return result.GetOptions(index);
-          }
-          public Builder SetOptions(int index, global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {
-            PrepareBuilder();
-            result.options_[index] = value;
-            return this;
-          }
-          public Builder AddOptions(global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {
-            PrepareBuilder();
-            result.options_.Add(value);
-            return this;
-          }
-          public Builder AddRangeOptions(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.EnumOptions> values) {
-            PrepareBuilder();
-            result.options_.Add(values);
-            return this;
-          }
-          public Builder ClearOptions() {
-            PrepareBuilder();
-            result.options_.Clear();
-            return this;
-          }
-
-          public bool HasBinary {
-            get { return result.hasBinary; }
-          }
-          public pb::ByteString Binary {
-            get { return result.Binary; }
-            set { SetBinary(value); }
-          }
-          public Builder SetBinary(pb::ByteString value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasBinary = true;
-            result.binary_ = value;
-            return this;
-          }
-          public Builder ClearBinary() {
-            PrepareBuilder();
-            result.hasBinary = false;
-            result.binary_ = pb::ByteString.Empty;
-            return this;
-          }
-        }
-        static Children() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int NumberFieldNumber = 6;
-    private bool hasNumber;
-    private long number_;
-    public bool HasNumber {
-      get { return hasNumber; }
-    }
-    public long Number {
-      get { return number_; }
-    }
-
-    public const int NumbersFieldNumber = 2;
-    private pbc::PopsicleList<int> numbers_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> NumbersList {
-      get { return pbc::Lists.AsReadOnly(numbers_); }
-    }
-    public int NumbersCount {
-      get { return numbers_.Count; }
-    }
-    public int GetNumbers(int index) {
-      return numbers_[index];
-    }
-
-    public const int TextFieldNumber = 3;
-    private bool hasText;
-    private string text_ = "";
-    public bool HasText {
-      get { return hasText; }
-    }
-    public string Text {
-      get { return text_; }
-    }
-
-    public const int TextlinesFieldNumber = 700;
-    private pbc::PopsicleList<string> textlines_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> TextlinesList {
-      get { return pbc::Lists.AsReadOnly(textlines_); }
-    }
-    public int TextlinesCount {
-      get { return textlines_.Count; }
-    }
-    public string GetTextlines(int index) {
-      return textlines_[index];
-    }
-
-    public const int ValidFieldNumber = 5;
-    private bool hasValid;
-    private bool valid_;
-    public bool HasValid {
-      get { return hasValid; }
-    }
-    public bool Valid {
-      get { return valid_; }
-    }
-
-    public const int ChildFieldNumber = 1;
-    private bool hasChild;
-    private global::Google.ProtocolBuffers.TestProtos.TestXmlChild child_;
-    public bool HasChild {
-      get { return hasChild; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestXmlChild Child {
-      get { return child_ ?? global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance; }
-    }
-
-    public const int ChildrenFieldNumber = 401;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> children_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> ChildrenList {
-      get { return children_; }
-    }
-    public int ChildrenCount {
-      get { return children_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children GetChildren(int index) {
-      return children_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testXmlMessageFieldNames;
-      pb::ExtendableMessage<TestXmlMessage, TestXmlMessage.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      if (hasChild) {
-        output.WriteMessage(1, field_names[0], Child);
-      }
-      if (numbers_.Count > 0) {
-        output.WriteInt32Array(2, field_names[3], numbers_);
-      }
-      if (hasText) {
-        output.WriteString(3, field_names[4], Text);
-      }
-      if (hasValid) {
-        output.WriteBool(5, field_names[6], Valid);
-      }
-      if (hasNumber) {
-        output.WriteInt64(6, field_names[2], Number);
-      }
-      extensionWriter.WriteUntil(200, output);
-      if (children_.Count > 0) {
-        output.WriteGroupArray(401, field_names[1], children_);
-      }
-      if (textlines_.Count > 0) {
-        output.WriteStringArray(700, field_names[5], textlines_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasNumber) {
-        size += pb::CodedOutputStream.ComputeInt64Size(6, Number);
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in NumbersList) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * numbers_.Count;
-      }
-      if (hasText) {
-        size += pb::CodedOutputStream.ComputeStringSize(3, Text);
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in TextlinesList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * textlines_.Count;
-      }
-      if (hasValid) {
-        size += pb::CodedOutputStream.ComputeBoolSize(5, Valid);
-      }
-      if (hasChild) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, Child);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children element in ChildrenList) {
-        size += pb::CodedOutputStream.ComputeGroupSize(401, element);
-      }
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestXmlMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestXmlMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestXmlMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestXmlMessage MakeReadOnly() {
-      numbers_.MakeReadOnly();
-      textlines_.MakeReadOnly();
-      children_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestXmlMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestXmlMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestXmlMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestXmlMessage result;
-
-      private TestXmlMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestXmlMessage original = result;
-          result = new TestXmlMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestXmlMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Descriptor; }
-      }
-
-      public override TestXmlMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.DefaultInstance; }
-      }
-
-      public override TestXmlMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestXmlMessage) {
-          return MergeFrom((TestXmlMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestXmlMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasNumber) {
-          Number = other.Number;
-        }
-        if (other.numbers_.Count != 0) {
-          result.numbers_.Add(other.numbers_);
-        }
-        if (other.HasText) {
-          Text = other.Text;
-        }
-        if (other.textlines_.Count != 0) {
-          result.textlines_.Add(other.textlines_);
-        }
-        if (other.HasValid) {
-          Valid = other.Valid;
-        }
-        if (other.HasChild) {
-          MergeChild(other.Child);
-        }
-        if (other.children_.Count != 0) {
-          result.children_.Add(other.children_);
-        }
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testXmlMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testXmlMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestXmlChild.CreateBuilder();
-              if (result.hasChild) {
-                subBuilder.MergeFrom(Child);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Child = subBuilder.BuildPartial();
-              break;
-            }
-            case 18:
-            case 16: {
-              input.ReadInt32Array(tag, field_name, result.numbers_);
-              break;
-            }
-            case 26: {
-              result.hasText = input.ReadString(ref result.text_);
-              break;
-            }
-            case 40: {
-              result.hasValid = input.ReadBool(ref result.valid_);
-              break;
-            }
-            case 48: {
-              result.hasNumber = input.ReadInt64(ref result.number_);
-              break;
-            }
-            case 3211: {
-              input.ReadGroupArray(tag, field_name, result.children_, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 5602: {
-              input.ReadStringArray(tag, field_name, result.textlines_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasNumber {
-        get { return result.hasNumber; }
-      }
-      public long Number {
-        get { return result.Number; }
-        set { SetNumber(value); }
-      }
-      public Builder SetNumber(long value) {
-        PrepareBuilder();
-        result.hasNumber = true;
-        result.number_ = value;
-        return this;
-      }
-      public Builder ClearNumber() {
-        PrepareBuilder();
-        result.hasNumber = false;
-        result.number_ = 0L;
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> NumbersList {
-        get { return PrepareBuilder().numbers_; }
-      }
-      public int NumbersCount {
-        get { return result.NumbersCount; }
-      }
-      public int GetNumbers(int index) {
-        return result.GetNumbers(index);
-      }
-      public Builder SetNumbers(int index, int value) {
-        PrepareBuilder();
-        result.numbers_[index] = value;
-        return this;
-      }
-      public Builder AddNumbers(int value) {
-        PrepareBuilder();
-        result.numbers_.Add(value);
-        return this;
-      }
-      public Builder AddRangeNumbers(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.numbers_.Add(values);
-        return this;
-      }
-      public Builder ClearNumbers() {
-        PrepareBuilder();
-        result.numbers_.Clear();
-        return this;
-      }
-
-      public bool HasText {
-        get { return result.hasText; }
-      }
-      public string Text {
-        get { return result.Text; }
-        set { SetText(value); }
-      }
-      public Builder SetText(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasText = true;
-        result.text_ = value;
-        return this;
-      }
-      public Builder ClearText() {
-        PrepareBuilder();
-        result.hasText = false;
-        result.text_ = "";
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> TextlinesList {
-        get { return PrepareBuilder().textlines_; }
-      }
-      public int TextlinesCount {
-        get { return result.TextlinesCount; }
-      }
-      public string GetTextlines(int index) {
-        return result.GetTextlines(index);
-      }
-      public Builder SetTextlines(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.textlines_[index] = value;
-        return this;
-      }
-      public Builder AddTextlines(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.textlines_.Add(value);
-        return this;
-      }
-      public Builder AddRangeTextlines(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.textlines_.Add(values);
-        return this;
-      }
-      public Builder ClearTextlines() {
-        PrepareBuilder();
-        result.textlines_.Clear();
-        return this;
-      }
-
-      public bool HasValid {
-        get { return result.hasValid; }
-      }
-      public bool Valid {
-        get { return result.Valid; }
-        set { SetValid(value); }
-      }
-      public Builder SetValid(bool value) {
-        PrepareBuilder();
-        result.hasValid = true;
-        result.valid_ = value;
-        return this;
-      }
-      public Builder ClearValid() {
-        PrepareBuilder();
-        result.hasValid = false;
-        result.valid_ = false;
-        return this;
-      }
-
-      public bool HasChild {
-       get { return result.hasChild; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestXmlChild Child {
-        get { return result.Child; }
-        set { SetChild(value); }
-      }
-      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlChild value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasChild = true;
-        result.child_ = value;
-        return this;
-      }
-      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasChild = true;
-        result.child_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeChild(global::Google.ProtocolBuffers.TestProtos.TestXmlChild value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasChild &&
-            result.child_ != global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance) {
-            result.child_ = global::Google.ProtocolBuffers.TestProtos.TestXmlChild.CreateBuilder(result.child_).MergeFrom(value).BuildPartial();
-        } else {
-          result.child_ = value;
-        }
-        result.hasChild = true;
-        return this;
-      }
-      public Builder ClearChild() {
-        PrepareBuilder();
-        result.hasChild = false;
-        result.child_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> ChildrenList {
-        get { return PrepareBuilder().children_; }
-      }
-      public int ChildrenCount {
-        get { return result.ChildrenCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children GetChildren(int index) {
-        return result.GetChildren(index);
-      }
-      public Builder SetChildren(int index, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.children_[index] = value;
-        return this;
-      }
-      public Builder SetChildren(int index, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.children_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddChildren(global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.children_.Add(value);
-        return this;
-      }
-      public Builder AddChildren(global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.children_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeChildren(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> values) {
-        PrepareBuilder();
-        result.children_.Add(values);
-        return this;
-      }
-      public Builder ClearChildren() {
-        PrepareBuilder();
-        result.children_.Clear();
-        return this;
-      }
-    }
-    static TestXmlMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestXmlExtension : pb::GeneratedMessage<TestXmlExtension, TestXmlExtension.Builder> {
-    private TestXmlExtension() { }
-    private static readonly TestXmlExtension defaultInstance = new TestXmlExtension().MakeReadOnly();
-    private static readonly string[] _testXmlExtensionFieldNames = new string[] { "number" };
-    private static readonly uint[] _testXmlExtensionFieldTags = new uint[] { 8 };
-    public static TestXmlExtension DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestXmlExtension DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestXmlExtension ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlExtension__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestXmlExtension, TestXmlExtension.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.internal__static_protobuf_unittest_extra_TestXmlExtension__FieldAccessorTable; }
-    }
-
-    public const int NumberFieldNumber = 1;
-    private bool hasNumber;
-    private int number_;
-    public bool HasNumber {
-      get { return hasNumber; }
-    }
-    public int Number {
-      get { return number_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!hasNumber) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testXmlExtensionFieldNames;
-      if (hasNumber) {
-        output.WriteInt32(1, field_names[0], Number);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasNumber) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Number);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestXmlExtension ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlExtension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlExtension ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestXmlExtension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlExtension ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlExtension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestXmlExtension ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestXmlExtension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestXmlExtension ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestXmlExtension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestXmlExtension MakeReadOnly() {
-      return this;
-    }
-
-    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(TestXmlExtension prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlExtension, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestXmlExtension cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestXmlExtension result;
-
-      private TestXmlExtension PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestXmlExtension original = result;
-          result = new TestXmlExtension();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestXmlExtension MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.Descriptor; }
-      }
-
-      public override TestXmlExtension DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.DefaultInstance; }
-      }
-
-      public override TestXmlExtension BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestXmlExtension) {
-          return MergeFrom((TestXmlExtension) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestXmlExtension other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasNumber) {
-          Number = other.Number;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testXmlExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testXmlExtensionFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasNumber = input.ReadInt32(ref result.number_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasNumber {
-        get { return result.hasNumber; }
-      }
-      public int Number {
-        get { return result.Number; }
-        set { SetNumber(value); }
-      }
-      public Builder SetNumber(int value) {
-        PrepareBuilder();
-        result.hasNumber = true;
-        result.number_ = value;
-        return this;
-      }
-      public Builder ClearNumber() {
-        PrepareBuilder();
-        result.hasNumber = false;
-        result.number_ = 0;
-        return this;
-      }
-    }
-    static TestXmlExtension() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestExtrasXmltest.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 0 - 347
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImport.cs

@@ -1,347 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unittest_import.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnittestImport {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_import_ImportMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ImportMessage, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder> internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnittestImport() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "CiVnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvEhhwcm90", 
-            "b2J1Zl91bml0dGVzdF9pbXBvcnQaLGdvb2dsZS9wcm90b2J1Zi91bml0dGVz", 
-            "dF9pbXBvcnRfcHVibGljLnByb3RvIhoKDUltcG9ydE1lc3NhZ2USCQoBZBgB", 
-            "IAEoBSo8CgpJbXBvcnRFbnVtEg4KCklNUE9SVF9GT08QBxIOCgpJTVBPUlRf", 
-            "QkFSEAgSDgoKSU1QT1JUX0JBWhAJQkMKGGNvbS5nb29nbGUucHJvdG9idWYu", 
-            "dGVzdEgB+AEBqgIhR29vZ2xlLlByb3RvY29sQnVmZmVycy5UZXN0UHJvdG9z", 
-          "UAA="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_import_ImportMessage__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ImportMessage, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder>(internal__static_protobuf_unittest_import_ImportMessage__Descriptor,
-                new string[] { "D", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.TestProtos.UnittestImportPublic.RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          global::Google.ProtocolBuffers.TestProtos.UnittestImportPublic.Descriptor, 
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Enums
-  public enum ImportEnum {
-    IMPORT_FOO = 7,
-    IMPORT_BAR = 8,
-    IMPORT_BAZ = 9,
-  }
-
-  #endregion
-
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class ImportMessage : pb::GeneratedMessage<ImportMessage, ImportMessage.Builder> {
-    private ImportMessage() { }
-    private static readonly ImportMessage defaultInstance = new ImportMessage().MakeReadOnly();
-    private static readonly string[] _importMessageFieldNames = new string[] { "d" };
-    private static readonly uint[] _importMessageFieldTags = new uint[] { 8 };
-    public static ImportMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override ImportMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override ImportMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestImport.internal__static_protobuf_unittest_import_ImportMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<ImportMessage, ImportMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestImport.internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable; }
-    }
-
-    public const int DFieldNumber = 1;
-    private bool hasD;
-    private int d_;
-    public bool HasD {
-      get { return hasD; }
-    }
-    public int D {
-      get { return d_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _importMessageFieldNames;
-      if (hasD) {
-        output.WriteInt32(1, field_names[0], D);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasD) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, D);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static ImportMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ImportMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ImportMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ImportMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ImportMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ImportMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ImportMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ImportMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ImportMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ImportMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ImportMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(ImportMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<ImportMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ImportMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private ImportMessage result;
-
-      private ImportMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ImportMessage original = result;
-          result = new ImportMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override ImportMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessage.Descriptor; }
-      }
-
-      public override ImportMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance; }
-      }
-
-      public override ImportMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ImportMessage) {
-          return MergeFrom((ImportMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(ImportMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasD) {
-          D = other.D;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_importMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _importMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasD = input.ReadInt32(ref result.d_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasD {
-        get { return result.hasD; }
-      }
-      public int D {
-        get { return result.D; }
-        set { SetD(value); }
-      }
-      public Builder SetD(int value) {
-        PrepareBuilder();
-        result.hasD = true;
-        result.d_ = value;
-        return this;
-      }
-      public Builder ClearD() {
-        PrepareBuilder();
-        result.hasD = false;
-        result.d_ = 0;
-        return this;
-      }
-    }
-    static ImportMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestImport.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 165 - 0
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportProto3.cs

@@ -0,0 +1,165 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/protobuf/unittest_import_proto3.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbd = global::Google.Protobuf.Descriptors;
+using scg = global::System.Collections.Generic;
+namespace Google.Protobuf.TestProtos {
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public static partial class UnittestImportProto3 {
+
+    #region Static variables
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_import_ImportMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.ImportMessage> internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable;
+    #endregion
+    #region Descriptor
+    public static pbd::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbd::FileDescriptor descriptor;
+
+    static UnittestImportProto3() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          string.Concat(
+            "Cixnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3Byb3RvMy5wcm90", 
+            "bxIYcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0GjNnb29nbGUvcHJvdG9idWYv", 
+            "dW5pdHRlc3RfaW1wb3J0X3B1YmxpY19wcm90bzMucHJvdG8iGgoNSW1wb3J0", 
+            "TWVzc2FnZRIJCgFkGAEgASgFKlkKCkltcG9ydEVudW0SGwoXSU1QT1JUX0VO", 
+            "VU1fVU5TUEVDSUZJRUQQABIOCgpJTVBPUlRfRk9PEAcSDgoKSU1QT1JUX0JB", 
+            "UhAIEg4KCklNUE9SVF9CQVoQCUI8Chhjb20uZ29vZ2xlLnByb3RvYnVmLnRl", 
+            "c3RIAfgBAaoCGkdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zUABiBnByb3Rv", 
+          "Mw=="));
+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
+        descriptor = root;
+        internal__static_protobuf_unittest_import_ImportMessage__Descriptor = Descriptor.MessageTypes[0];
+        internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.ImportMessage>(internal__static_protobuf_unittest_import_ImportMessage__Descriptor,
+                new string[] { "D", });
+      };
+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+          new pbd::FileDescriptor[] {
+          global::Google.Protobuf.TestProtos.UnittestImportPublicProto3.Descriptor, 
+          }, assigner);
+    }
+    #endregion
+
+  }
+  #region Enums
+  public enum ImportEnum : long {
+    IMPORT_ENUM_UNSPECIFIED = 0,
+    IMPORT_FOO = 7,
+    IMPORT_BAR = 8,
+    IMPORT_BAZ = 9,
+  }
+
+  #endregion
+
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class ImportMessage : pb::IMessage<ImportMessage>, global::System.IEquatable<ImportMessage> {
+    private static readonly pb::MessageParser<ImportMessage> _parser = new pb::MessageParser<ImportMessage>(() => new ImportMessage());
+    public static pb::MessageParser<ImportMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "d" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestImportProto3.internal__static_protobuf_unittest_import_ImportMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<ImportMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestImportProto3.internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable; }
+    }
+
+    public ImportMessage() { }
+    public ImportMessage(ImportMessage other) {
+      MergeFrom(other);
+    }
+    public const int DFieldNumber = 1;
+    private int d_;
+    public int D {
+      get { return d_; }
+      set { d_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as ImportMessage);
+    }
+
+    public bool Equals(ImportMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (D != other.D) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (D != 0) hash ^= D.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (D != 0) {
+        output.WriteInt32(1, fieldNames[0], D);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (D != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, D);
+      }
+      return size;
+    }
+    public void MergeFrom(ImportMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.D != 0) {
+        D = other.D;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref d_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  #endregion
+
+}
+
+#endregion Designer generated code

+ 0 - 333
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportPublic.cs

@@ -1,333 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unittest_import_public.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnittestImportPublic {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_import_PublicImportMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.PublicImportMessage, global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.Builder> internal__static_protobuf_unittest_import_PublicImportMessage__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnittestImportPublic() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "Cixnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpYy5wcm90", 
-            "bxIYcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0IiAKE1B1YmxpY0ltcG9ydE1l", 
-            "c3NhZ2USCQoBZRgBIAEoBUI+Chhjb20uZ29vZ2xlLnByb3RvYnVmLnRlc3Sq", 
-          "AiFHb29nbGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3M="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_import_PublicImportMessage__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_import_PublicImportMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.PublicImportMessage, global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.Builder>(internal__static_protobuf_unittest_import_PublicImportMessage__Descriptor,
-                new string[] { "E", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class PublicImportMessage : pb::GeneratedMessage<PublicImportMessage, PublicImportMessage.Builder> {
-    private PublicImportMessage() { }
-    private static readonly PublicImportMessage defaultInstance = new PublicImportMessage().MakeReadOnly();
-    private static readonly string[] _publicImportMessageFieldNames = new string[] { "e" };
-    private static readonly uint[] _publicImportMessageFieldTags = new uint[] { 8 };
-    public static PublicImportMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override PublicImportMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override PublicImportMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestImportPublic.internal__static_protobuf_unittest_import_PublicImportMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<PublicImportMessage, PublicImportMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestImportPublic.internal__static_protobuf_unittest_import_PublicImportMessage__FieldAccessorTable; }
-    }
-
-    public const int EFieldNumber = 1;
-    private bool hasE;
-    private int e_;
-    public bool HasE {
-      get { return hasE; }
-    }
-    public int E {
-      get { return e_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _publicImportMessageFieldNames;
-      if (hasE) {
-        output.WriteInt32(1, field_names[0], E);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasE) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, E);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static PublicImportMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static PublicImportMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static PublicImportMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static PublicImportMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static PublicImportMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static PublicImportMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static PublicImportMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static PublicImportMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static PublicImportMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static PublicImportMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private PublicImportMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(PublicImportMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<PublicImportMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(PublicImportMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private PublicImportMessage result;
-
-      private PublicImportMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          PublicImportMessage original = result;
-          result = new PublicImportMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override PublicImportMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.Descriptor; }
-      }
-
-      public override PublicImportMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.DefaultInstance; }
-      }
-
-      public override PublicImportMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is PublicImportMessage) {
-          return MergeFrom((PublicImportMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(PublicImportMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.PublicImportMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasE) {
-          E = other.E;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_publicImportMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _publicImportMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasE = input.ReadInt32(ref result.e_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasE {
-        get { return result.hasE; }
-      }
-      public int E {
-        get { return result.E; }
-        set { SetE(value); }
-      }
-      public Builder SetE(int value) {
-        PrepareBuilder();
-        result.hasE = true;
-        result.e_ = value;
-        return this;
-      }
-      public Builder ClearE() {
-        PrepareBuilder();
-        result.hasE = false;
-        result.e_ = 0;
-        return this;
-      }
-    }
-    static PublicImportMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestImportPublic.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 150 - 0
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestImportPublicProto3.cs

@@ -0,0 +1,150 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/protobuf/unittest_import_public_proto3.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbd = global::Google.Protobuf.Descriptors;
+using scg = global::System.Collections.Generic;
+namespace Google.Protobuf.TestProtos {
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public static partial class UnittestImportPublicProto3 {
+
+    #region Static variables
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_import_PublicImportMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.PublicImportMessage> internal__static_protobuf_unittest_import_PublicImportMessage__FieldAccessorTable;
+    #endregion
+    #region Descriptor
+    public static pbd::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbd::FileDescriptor descriptor;
+
+    static UnittestImportPublicProto3() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          string.Concat(
+            "CjNnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0X3B1YmxpY19wcm90", 
+            "bzMucHJvdG8SGHByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydCIgChNQdWJsaWNJ", 
+            "bXBvcnRNZXNzYWdlEgkKAWUYASABKAVCNwoYY29tLmdvb2dsZS5wcm90b2J1", 
+          "Zi50ZXN0qgIaR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3NiBnByb3RvMw=="));
+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
+        descriptor = root;
+        internal__static_protobuf_unittest_import_PublicImportMessage__Descriptor = Descriptor.MessageTypes[0];
+        internal__static_protobuf_unittest_import_PublicImportMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.PublicImportMessage>(internal__static_protobuf_unittest_import_PublicImportMessage__Descriptor,
+                new string[] { "E", });
+      };
+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+          new pbd::FileDescriptor[] {
+          }, assigner);
+    }
+    #endregion
+
+  }
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class PublicImportMessage : pb::IMessage<PublicImportMessage>, global::System.IEquatable<PublicImportMessage> {
+    private static readonly pb::MessageParser<PublicImportMessage> _parser = new pb::MessageParser<PublicImportMessage>(() => new PublicImportMessage());
+    public static pb::MessageParser<PublicImportMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "e" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestImportPublicProto3.internal__static_protobuf_unittest_import_PublicImportMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<PublicImportMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestImportPublicProto3.internal__static_protobuf_unittest_import_PublicImportMessage__FieldAccessorTable; }
+    }
+
+    public PublicImportMessage() { }
+    public PublicImportMessage(PublicImportMessage other) {
+      MergeFrom(other);
+    }
+    public const int EFieldNumber = 1;
+    private int e_;
+    public int E {
+      get { return e_; }
+      set { e_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as PublicImportMessage);
+    }
+
+    public bool Equals(PublicImportMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (E != other.E) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (E != 0) hash ^= E.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (E != 0) {
+        output.WriteInt32(1, fieldNames[0], E);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (E != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, E);
+      }
+      return size;
+    }
+    public void MergeFrom(PublicImportMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.E != 0) {
+        E = other.E;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref e_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  #endregion
+
+}
+
+#endregion Designer generated code

+ 452 - 2119
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestIssues.cs

@@ -3,32 +3,24 @@
 #pragma warning disable 1591, 0612, 3021
 #region Designer generated code
 
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbd = global::Google.Protobuf.Descriptors;
 using scg = global::System.Collections.Generic;
 namespace UnitTest.Issues.TestProtos {
 
   [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
   public static partial class UnittestIssues {
 
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
     #region Static variables
-    internal static pbd::MessageDescriptor internal__static_unittest_issues_MyMessageAReferenceB__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.MyMessageAReferenceB, global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Builder> internal__static_unittest_issues_MyMessageAReferenceB__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_unittest_issues_MyMessageBReferenceA__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.MyMessageBReferenceA, global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Builder> internal__static_unittest_issues_MyMessageBReferenceA__FieldAccessorTable;
     internal static pbd::MessageDescriptor internal__static_unittest_issues_NegativeEnumMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.NegativeEnumMessage, global::UnitTest.Issues.TestProtos.NegativeEnumMessage.Builder> internal__static_unittest_issues_NegativeEnumMessage__FieldAccessorTable;
+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.NegativeEnumMessage> internal__static_unittest_issues_NegativeEnumMessage__FieldAccessorTable;
     internal static pbd::MessageDescriptor internal__static_unittest_issues_DeprecatedChild__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedChild, global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder> internal__static_unittest_issues_DeprecatedChild__FieldAccessorTable;
+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedChild> internal__static_unittest_issues_DeprecatedChild__FieldAccessorTable;
     internal static pbd::MessageDescriptor internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage, global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.Builder> internal__static_unittest_issues_DeprecatedFieldsMessage__FieldAccessorTable;
+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage> internal__static_unittest_issues_DeprecatedFieldsMessage__FieldAccessorTable;
     internal static pbd::MessageDescriptor internal__static_unittest_issues_ItemField__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.ItemField, global::UnitTest.Issues.TestProtos.ItemField.Builder> internal__static_unittest_issues_ItemField__FieldAccessorTable;
+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.ItemField> internal__static_unittest_issues_ItemField__FieldAccessorTable;
     #endregion
     #region Descriptor
     public static pbd::FileDescriptor Descriptor {
@@ -39,55 +31,41 @@ namespace UnitTest.Issues.TestProtos {
     static UnittestIssues() {
       byte[] descriptorData = global::System.Convert.FromBase64String(
           string.Concat(
-            "ChV1bml0dGVzdF9pc3N1ZXMucHJvdG8SD3VuaXR0ZXN0X2lzc3VlcyJMChRN", 
-            "eU1lc3NhZ2VBUmVmZXJlbmNlQhI0CgV2YWx1ZRgBIAIoCzIlLnVuaXR0ZXN0", 
-            "X2lzc3Vlcy5NeU1lc3NhZ2VCUmVmZXJlbmNlQSJMChRNeU1lc3NhZ2VCUmVm", 
-            "ZXJlbmNlQRI0CgV2YWx1ZRgBIAIoCzIlLnVuaXR0ZXN0X2lzc3Vlcy5NeU1l", 
-            "c3NhZ2VBUmVmZXJlbmNlQiKsAQoTTmVnYXRpdmVFbnVtTWVzc2FnZRIsCgV2", 
-            "YWx1ZRgBIAEoDjIdLnVuaXR0ZXN0X2lzc3Vlcy5OZWdhdGl2ZUVudW0SLQoG", 
-            "dmFsdWVzGAIgAygOMh0udW5pdHRlc3RfaXNzdWVzLk5lZ2F0aXZlRW51bRI4", 
-            "Cg1wYWNrZWRfdmFsdWVzGAMgAygOMh0udW5pdHRlc3RfaXNzdWVzLk5lZ2F0", 
-            "aXZlRW51bUICEAEiEQoPRGVwcmVjYXRlZENoaWxkIrkCChdEZXByZWNhdGVk", 
-            "RmllbGRzTWVzc2FnZRIaCg5QcmltaXRpdmVWYWx1ZRgBIAEoBUICGAESGgoO", 
-            "UHJpbWl0aXZlQXJyYXkYAiADKAVCAhgBEjoKDE1lc3NhZ2VWYWx1ZRgDIAEo", 
-            "CzIgLnVuaXR0ZXN0X2lzc3Vlcy5EZXByZWNhdGVkQ2hpbGRCAhgBEjoKDE1l", 
-            "c3NhZ2VBcnJheRgEIAMoCzIgLnVuaXR0ZXN0X2lzc3Vlcy5EZXByZWNhdGVk", 
-            "Q2hpbGRCAhgBEjYKCUVudW1WYWx1ZRgFIAEoDjIfLnVuaXR0ZXN0X2lzc3Vl", 
-            "cy5EZXByZWNhdGVkRW51bUICGAESNgoJRW51bUFycmF5GAYgAygOMh8udW5p", 
-            "dHRlc3RfaXNzdWVzLkRlcHJlY2F0ZWRFbnVtQgIYASIZCglJdGVtRmllbGQS", 
-            "DAoEaXRlbRgBIAEoBSpHCgxOZWdhdGl2ZUVudW0SFgoJRml2ZUJlbG93EPv/", 
-            "/////////wESFQoITWludXNPbmUQ////////////ARIICgRaZXJvEAAqGQoO", 
-            "RGVwcmVjYXRlZEVudW0SBwoDb25lEAFCH0gBqgIaVW5pdFRlc3QuSXNzdWVz", 
-          "LlRlc3RQcm90b3M="));
+            "ChV1bml0dGVzdF9pc3N1ZXMucHJvdG8SD3VuaXR0ZXN0X2lzc3VlcyKwAQoT", 
+            "TmVnYXRpdmVFbnVtTWVzc2FnZRIsCgV2YWx1ZRgBIAEoDjIdLnVuaXR0ZXN0", 
+            "X2lzc3Vlcy5OZWdhdGl2ZUVudW0SMQoGdmFsdWVzGAIgAygOMh0udW5pdHRl", 
+            "c3RfaXNzdWVzLk5lZ2F0aXZlRW51bUICEAASOAoNcGFja2VkX3ZhbHVlcxgD", 
+            "IAMoDjIdLnVuaXR0ZXN0X2lzc3Vlcy5OZWdhdGl2ZUVudW1CAhABIhEKD0Rl", 
+            "cHJlY2F0ZWRDaGlsZCK5AgoXRGVwcmVjYXRlZEZpZWxkc01lc3NhZ2USGgoO", 
+            "UHJpbWl0aXZlVmFsdWUYASABKAVCAhgBEhoKDlByaW1pdGl2ZUFycmF5GAIg", 
+            "AygFQgIYARI6CgxNZXNzYWdlVmFsdWUYAyABKAsyIC51bml0dGVzdF9pc3N1", 
+            "ZXMuRGVwcmVjYXRlZENoaWxkQgIYARI6CgxNZXNzYWdlQXJyYXkYBCADKAsy", 
+            "IC51bml0dGVzdF9pc3N1ZXMuRGVwcmVjYXRlZENoaWxkQgIYARI2CglFbnVt", 
+            "VmFsdWUYBSABKA4yHy51bml0dGVzdF9pc3N1ZXMuRGVwcmVjYXRlZEVudW1C", 
+            "AhgBEjYKCUVudW1BcnJheRgGIAMoDjIfLnVuaXR0ZXN0X2lzc3Vlcy5EZXBy", 
+            "ZWNhdGVkRW51bUICGAEiGQoJSXRlbUZpZWxkEgwKBGl0ZW0YASABKAUqVQoM", 
+            "TmVnYXRpdmVFbnVtEhYKEk5FR0FUSVZFX0VOVU1fWkVSTxAAEhYKCUZpdmVC", 
+            "ZWxvdxD7//////////8BEhUKCE1pbnVzT25lEP///////////wEqLgoORGVw", 
+            "cmVjYXRlZEVudW0SEwoPREVQUkVDQVRFRF9aRVJPEAASBwoDb25lEAFCH0gB", 
+          "qgIaVW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3NiBnByb3RvMw=="));
       pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
         descriptor = root;
-        internal__static_unittest_issues_MyMessageAReferenceB__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_unittest_issues_MyMessageAReferenceB__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.MyMessageAReferenceB, global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Builder>(internal__static_unittest_issues_MyMessageAReferenceB__Descriptor,
-                new string[] { "Value", });
-        internal__static_unittest_issues_MyMessageBReferenceA__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_unittest_issues_MyMessageBReferenceA__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.MyMessageBReferenceA, global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Builder>(internal__static_unittest_issues_MyMessageBReferenceA__Descriptor,
-                new string[] { "Value", });
-        internal__static_unittest_issues_NegativeEnumMessage__Descriptor = Descriptor.MessageTypes[2];
+        internal__static_unittest_issues_NegativeEnumMessage__Descriptor = Descriptor.MessageTypes[0];
         internal__static_unittest_issues_NegativeEnumMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.NegativeEnumMessage, global::UnitTest.Issues.TestProtos.NegativeEnumMessage.Builder>(internal__static_unittest_issues_NegativeEnumMessage__Descriptor,
+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.NegativeEnumMessage>(internal__static_unittest_issues_NegativeEnumMessage__Descriptor,
                 new string[] { "Value", "Values", "PackedValues", });
-        internal__static_unittest_issues_DeprecatedChild__Descriptor = Descriptor.MessageTypes[3];
+        internal__static_unittest_issues_DeprecatedChild__Descriptor = Descriptor.MessageTypes[1];
         internal__static_unittest_issues_DeprecatedChild__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedChild, global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder>(internal__static_unittest_issues_DeprecatedChild__Descriptor,
+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedChild>(internal__static_unittest_issues_DeprecatedChild__Descriptor,
                 new string[] { });
-        internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor = Descriptor.MessageTypes[4];
+        internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor = Descriptor.MessageTypes[2];
         internal__static_unittest_issues_DeprecatedFieldsMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage, global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.Builder>(internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor,
+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage>(internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor,
                 new string[] { "PrimitiveValue", "PrimitiveArray", "MessageValue", "MessageArray", "EnumValue", "EnumArray", });
-        internal__static_unittest_issues_ItemField__Descriptor = Descriptor.MessageTypes[5];
+        internal__static_unittest_issues_ItemField__Descriptor = Descriptor.MessageTypes[3];
         internal__static_unittest_issues_ItemField__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.ItemField, global::UnitTest.Issues.TestProtos.ItemField.Builder>(internal__static_unittest_issues_ItemField__Descriptor,
+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.ItemField>(internal__static_unittest_issues_ItemField__Descriptor,
                 new string[] { "Item", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        return registry;
       };
       pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
           new pbd::FileDescriptor[] {
@@ -97,13 +75,14 @@ namespace UnitTest.Issues.TestProtos {
 
   }
   #region Enums
-  public enum NegativeEnum {
+  public enum NegativeEnum : long {
+    NEGATIVE_ENUM_ZERO = 0,
     FiveBelow = -5,
     MinusOne = -1,
-    Zero = 0,
   }
 
-  public enum DeprecatedEnum {
+  public enum DeprecatedEnum : long {
+    DEPRECATED_ZERO = 0,
     one = 1,
   }
 
@@ -111,2197 +90,551 @@ namespace UnitTest.Issues.TestProtos {
 
   #region Messages
   [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class MyMessageAReferenceB : pb::GeneratedMessage<MyMessageAReferenceB, MyMessageAReferenceB.Builder> {
-    private MyMessageAReferenceB() { }
-    private static readonly MyMessageAReferenceB defaultInstance = new MyMessageAReferenceB().MakeReadOnly();
-    private static readonly string[] _myMessageAReferenceBFieldNames = new string[] { "value" };
-    private static readonly uint[] _myMessageAReferenceBFieldTags = new uint[] { 10 };
-    public static MyMessageAReferenceB DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override MyMessageAReferenceB DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override MyMessageAReferenceB ThisMessage {
-      get { return this; }
-    }
+  public sealed partial class NegativeEnumMessage : pb::IMessage<NegativeEnumMessage>, global::System.IEquatable<NegativeEnumMessage> {
+    private static readonly pb::MessageParser<NegativeEnumMessage> _parser = new pb::MessageParser<NegativeEnumMessage>(() => new NegativeEnumMessage());
+    public static pb::MessageParser<NegativeEnumMessage> Parser { get { return _parser; } }
 
+    private static readonly string[] _fieldNames = new string[] { "packed_values", "value", "values" };
+    private static readonly uint[] _fieldTags = new uint[] { 26, 8, 16 };
     public static pbd::MessageDescriptor Descriptor {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_MyMessageAReferenceB__Descriptor; }
+      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_NegativeEnumMessage__Descriptor; }
     }
 
-    protected override pb::FieldAccess.FieldAccessorTable<MyMessageAReferenceB, MyMessageAReferenceB.Builder> InternalFieldAccessors {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_MyMessageAReferenceB__FieldAccessorTable; }
+    public pb::FieldAccess.FieldAccessorTable<NegativeEnumMessage> Fields {
+      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_NegativeEnumMessage__FieldAccessorTable; }
     }
 
-    public const int ValueFieldNumber = 1;
-    private bool hasValue;
-    private global::UnitTest.Issues.TestProtos.MyMessageBReferenceA value_;
-    public bool HasValue {
-      get { return hasValue; }
+    public NegativeEnumMessage() { }
+    public NegativeEnumMessage(NegativeEnumMessage other) {
+      MergeFrom(other);
     }
-    public global::UnitTest.Issues.TestProtos.MyMessageBReferenceA Value {
-      get { return value_ ?? global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!hasValue) return false;
-        if (!Value.IsInitialized) return false;
-        return true;
-      }
+    public const int ValueFieldNumber = 1;
+    private global::UnitTest.Issues.TestProtos.NegativeEnum value_ = global::UnitTest.Issues.TestProtos.NegativeEnum.NEGATIVE_ENUM_ZERO;
+    public global::UnitTest.Issues.TestProtos.NegativeEnum Value {
+      get { return value_; }
+      set { value_ = value; }
     }
 
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _myMessageAReferenceBFieldNames;
-      if (hasValue) {
-        output.WriteMessage(1, field_names[0], Value);
-      }
-      UnknownFields.WriteTo(output);
-    }
 
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
+    public const int ValuesFieldNumber = 2;
+    private readonly pbc::RepeatedField<global::UnitTest.Issues.TestProtos.NegativeEnum> values_ = new pbc::RepeatedField<global::UnitTest.Issues.TestProtos.NegativeEnum>();
+    public pbc::RepeatedField<global::UnitTest.Issues.TestProtos.NegativeEnum> Values {
+      get { return values_; }
     }
 
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasValue) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, Value);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static MyMessageAReferenceB ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static MyMessageAReferenceB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private MyMessageAReferenceB MakeReadOnly() {
-      return this;
+    public const int PackedValuesFieldNumber = 3;
+    private readonly pbc::RepeatedField<global::UnitTest.Issues.TestProtos.NegativeEnum> packedValues_ = new pbc::RepeatedField<global::UnitTest.Issues.TestProtos.NegativeEnum>();
+    public pbc::RepeatedField<global::UnitTest.Issues.TestProtos.NegativeEnum> PackedValues {
+      get { return packedValues_; }
     }
 
-    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(MyMessageAReferenceB prototype) {
-      return new Builder(prototype);
+    public override bool Equals(object other) {
+      return Equals(other as NegativeEnumMessage);
     }
 
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<MyMessageAReferenceB, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(MyMessageAReferenceB cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private MyMessageAReferenceB result;
-
-      private MyMessageAReferenceB PrepareBuilder() {
-        if (resultIsReadOnly) {
-          MyMessageAReferenceB original = result;
-          result = new MyMessageAReferenceB();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
+    public bool Equals(NegativeEnumMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
       }
-
-      protected override MyMessageAReferenceB MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
+      if (ReferenceEquals(other, this)) {
+        return true;
       }
+      if (Value != other.Value) return false;
+      if(!values_.Equals(other.values_)) return false;
+      if(!packedValues_.Equals(other.packedValues_)) return false;
+      return true;
+    }
 
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Value != global::UnitTest.Issues.TestProtos.NegativeEnum.NEGATIVE_ENUM_ZERO) hash ^= Value.GetHashCode();
+      hash ^= values_.GetHashCode();
+      hash ^= packedValues_.GetHashCode();
+      return hash;
+    }
 
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Descriptor; }
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Value != global::UnitTest.Issues.TestProtos.NegativeEnum.NEGATIVE_ENUM_ZERO) {
+        output.WriteEnum(1, fieldNames[1], Value);
       }
+      output.WriteEnumArray(2, fieldNames[2], values_);
+      output.WritePackedEnumArray(3, fieldNames[0], packedValues_);
+    }
 
-      public override MyMessageAReferenceB DefaultInstanceForType {
-        get { return global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.DefaultInstance; }
+    public int CalculateSize() {
+      int size = 0;
+      if (Value != global::UnitTest.Issues.TestProtos.NegativeEnum.NEGATIVE_ENUM_ZERO) {
+        size += pb::CodedOutputStream.ComputeEnumSize(1, Value);
       }
-
-      public override MyMessageAReferenceB BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
+      {
+        int dataSize = 0;
+        if (values_.Count > 0) {
+          foreach (global::UnitTest.Issues.TestProtos.NegativeEnum element in values_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 1 * values_.Count;
         }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
       }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is MyMessageAReferenceB) {
-          return MergeFrom((MyMessageAReferenceB) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
+      {
+        int dataSize = 0;
+        if (packedValues_.Count > 0) {
+          foreach (global::UnitTest.Issues.TestProtos.NegativeEnum element in packedValues_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 1;
+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
         }
       }
-
-      public override Builder MergeFrom(MyMessageAReferenceB other) {
-        if (other == global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasValue) {
-          MergeValue(other.Value);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
+      return size;
+    }
+    public void MergeFrom(NegativeEnumMessage other) {
+      if (other == null) {
+        return;
       }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      if (other.Value != global::UnitTest.Issues.TestProtos.NegativeEnum.NEGATIVE_ENUM_ZERO) {
+        Value = other.Value;
       }
+      values_.Add(other.values_);
+      packedValues_.Add(other.packedValues_);
+    }
 
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_myMessageAReferenceBFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _myMessageAReferenceBFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
           }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Builder subBuilder = global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.CreateBuilder();
-              if (result.hasValue) {
-                subBuilder.MergeFrom(Value);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Value = subBuilder.BuildPartial();
-              break;
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
             }
+            break;
+          case 8: {
+            input.ReadEnum(ref value_);
+            break;
+          }
+          case 18:
+          case 16: {
+            input.ReadEnumArray<global::UnitTest.Issues.TestProtos.NegativeEnum>(tag, fieldName, values_);
+            break;
+          }
+          case 26:
+          case 24: {
+            input.ReadEnumArray<global::UnitTest.Issues.TestProtos.NegativeEnum>(tag, fieldName, packedValues_);
+            break;
           }
         }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasValue {
-       get { return result.hasValue; }
-      }
-      public global::UnitTest.Issues.TestProtos.MyMessageBReferenceA Value {
-        get { return result.Value; }
-        set { SetValue(value); }
-      }
-      public Builder SetValue(global::UnitTest.Issues.TestProtos.MyMessageBReferenceA value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasValue = true;
-        result.value_ = value;
-        return this;
-      }
-      public Builder SetValue(global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasValue = true;
-        result.value_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeValue(global::UnitTest.Issues.TestProtos.MyMessageBReferenceA value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasValue &&
-            result.value_ != global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.DefaultInstance) {
-            result.value_ = global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.CreateBuilder(result.value_).MergeFrom(value).BuildPartial();
-        } else {
-          result.value_ = value;
-        }
-        result.hasValue = true;
-        return this;
       }
-      public Builder ClearValue() {
-        PrepareBuilder();
-        result.hasValue = false;
-        result.value_ = null;
-        return this;
-      }
-    }
-    static MyMessageAReferenceB() {
-      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnittestIssues.Descriptor, null);
     }
+
   }
 
   [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class MyMessageBReferenceA : pb::GeneratedMessage<MyMessageBReferenceA, MyMessageBReferenceA.Builder> {
-    private MyMessageBReferenceA() { }
-    private static readonly MyMessageBReferenceA defaultInstance = new MyMessageBReferenceA().MakeReadOnly();
-    private static readonly string[] _myMessageBReferenceAFieldNames = new string[] { "value" };
-    private static readonly uint[] _myMessageBReferenceAFieldTags = new uint[] { 10 };
-    public static MyMessageBReferenceA DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override MyMessageBReferenceA DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override MyMessageBReferenceA ThisMessage {
-      get { return this; }
-    }
+  public sealed partial class DeprecatedChild : pb::IMessage<DeprecatedChild>, global::System.IEquatable<DeprecatedChild> {
+    private static readonly pb::MessageParser<DeprecatedChild> _parser = new pb::MessageParser<DeprecatedChild>(() => new DeprecatedChild());
+    public static pb::MessageParser<DeprecatedChild> Parser { get { return _parser; } }
 
+    private static readonly string[] _fieldNames = new string[] {  };
+    private static readonly uint[] _fieldTags = new uint[] {  };
     public static pbd::MessageDescriptor Descriptor {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_MyMessageBReferenceA__Descriptor; }
+      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_DeprecatedChild__Descriptor; }
     }
 
-    protected override pb::FieldAccess.FieldAccessorTable<MyMessageBReferenceA, MyMessageBReferenceA.Builder> InternalFieldAccessors {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_MyMessageBReferenceA__FieldAccessorTable; }
+    public pb::FieldAccess.FieldAccessorTable<DeprecatedChild> Fields {
+      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_DeprecatedChild__FieldAccessorTable; }
     }
 
-    public const int ValueFieldNumber = 1;
-    private bool hasValue;
-    private global::UnitTest.Issues.TestProtos.MyMessageAReferenceB value_;
-    public bool HasValue {
-      get { return hasValue; }
+    public DeprecatedChild() { }
+    public DeprecatedChild(DeprecatedChild other) {
+      MergeFrom(other);
     }
-    public global::UnitTest.Issues.TestProtos.MyMessageAReferenceB Value {
-      get { return value_ ?? global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.DefaultInstance; }
+    public override bool Equals(object other) {
+      return Equals(other as DeprecatedChild);
     }
 
-    public override bool IsInitialized {
-      get {
-        if (!hasValue) return false;
-        if (!Value.IsInitialized) return false;
+    public bool Equals(DeprecatedChild other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
         return true;
       }
+      return true;
     }
 
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _myMessageBReferenceAFieldNames;
-      if (hasValue) {
-        output.WriteMessage(1, field_names[0], Value);
-      }
-      UnknownFields.WriteTo(output);
+    public override int GetHashCode() {
+      int hash = 0;
+      return hash;
     }
 
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
     }
 
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasValue) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, Value);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
+    public int CalculateSize() {
+      int size = 0;
       return size;
     }
-    public static MyMessageBReferenceA ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+    public void MergeFrom(DeprecatedChild other) {
+      if (other == null) {
+        return;
+      }
     }
-    public static MyMessageBReferenceA ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+        }
+      }
     }
-    public static MyMessageBReferenceA ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class DeprecatedFieldsMessage : pb::IMessage<DeprecatedFieldsMessage>, global::System.IEquatable<DeprecatedFieldsMessage> {
+    private static readonly pb::MessageParser<DeprecatedFieldsMessage> _parser = new pb::MessageParser<DeprecatedFieldsMessage>(() => new DeprecatedFieldsMessage());
+    public static pb::MessageParser<DeprecatedFieldsMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "EnumArray", "EnumValue", "MessageArray", "MessageValue", "PrimitiveArray", "PrimitiveValue" };
+    private static readonly uint[] _fieldTags = new uint[] { 48, 40, 34, 26, 16, 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor; }
     }
-    public static MyMessageBReferenceA ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+
+    public pb::FieldAccess.FieldAccessorTable<DeprecatedFieldsMessage> Fields {
+      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_DeprecatedFieldsMessage__FieldAccessorTable; }
     }
-    public static MyMessageBReferenceA ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+
+    public DeprecatedFieldsMessage() { }
+    public DeprecatedFieldsMessage(DeprecatedFieldsMessage other) {
+      MergeFrom(other);
     }
-    public static MyMessageBReferenceA ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+    public const int PrimitiveValueFieldNumber = 1;
+    private int primitiveValue_;
+    [global::System.ObsoleteAttribute()]
+    public int PrimitiveValue {
+      get { return primitiveValue_; }
+      set { primitiveValue_ = value; }
     }
-    public static MyMessageBReferenceA ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+
+
+    public const int PrimitiveArrayFieldNumber = 2;
+    private readonly pbc::RepeatedField<int> primitiveArray_ = new pbc::RepeatedField<int>();
+    [global::System.ObsoleteAttribute()]
+    public pbc::RepeatedField<int> PrimitiveArray {
+      get { return primitiveArray_; }
     }
-    public static MyMessageBReferenceA ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+
+    public const int MessageValueFieldNumber = 3;
+    private global::UnitTest.Issues.TestProtos.DeprecatedChild messageValue_;
+    [global::System.ObsoleteAttribute()]
+    public global::UnitTest.Issues.TestProtos.DeprecatedChild MessageValue {
+      get { return messageValue_; }
+      set { messageValue_ = value; }
     }
-    public static MyMessageBReferenceA ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+
+    public const int MessageArrayFieldNumber = 4;
+    private readonly pbc::RepeatedField<global::UnitTest.Issues.TestProtos.DeprecatedChild> messageArray_ = new pbc::RepeatedField<global::UnitTest.Issues.TestProtos.DeprecatedChild>();
+    [global::System.ObsoleteAttribute()]
+    public pbc::RepeatedField<global::UnitTest.Issues.TestProtos.DeprecatedChild> MessageArray {
+      get { return messageArray_; }
     }
-    public static MyMessageBReferenceA ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+
+    public const int EnumValueFieldNumber = 5;
+    private global::UnitTest.Issues.TestProtos.DeprecatedEnum enumValue_ = global::UnitTest.Issues.TestProtos.DeprecatedEnum.DEPRECATED_ZERO;
+    [global::System.ObsoleteAttribute()]
+    public global::UnitTest.Issues.TestProtos.DeprecatedEnum EnumValue {
+      get { return enumValue_; }
+      set { enumValue_ = value; }
     }
-    private MyMessageBReferenceA MakeReadOnly() {
-      return this;
+
+
+    public const int EnumArrayFieldNumber = 6;
+    private readonly pbc::RepeatedField<global::UnitTest.Issues.TestProtos.DeprecatedEnum> enumArray_ = new pbc::RepeatedField<global::UnitTest.Issues.TestProtos.DeprecatedEnum>();
+    [global::System.ObsoleteAttribute()]
+    public pbc::RepeatedField<global::UnitTest.Issues.TestProtos.DeprecatedEnum> EnumArray {
+      get { return enumArray_; }
     }
 
-    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(MyMessageBReferenceA prototype) {
-      return new Builder(prototype);
+    public override bool Equals(object other) {
+      return Equals(other as DeprecatedFieldsMessage);
     }
 
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<MyMessageBReferenceA, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
+    public bool Equals(DeprecatedFieldsMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
       }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(MyMessageBReferenceA cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
+      if (ReferenceEquals(other, this)) {
+        return true;
       }
+      if (PrimitiveValue != other.PrimitiveValue) return false;
+      if(!primitiveArray_.Equals(other.primitiveArray_)) return false;
+      if (!object.Equals(MessageValue, other.MessageValue)) return false;if(!messageArray_.Equals(other.messageArray_)) return false;
+      if (EnumValue != other.EnumValue) return false;
+      if(!enumArray_.Equals(other.enumArray_)) return false;
+      return true;
+    }
 
-      private bool resultIsReadOnly;
-      private MyMessageBReferenceA result;
+    public override int GetHashCode() {
+      int hash = 0;
+      if (PrimitiveValue != 0) hash ^= PrimitiveValue.GetHashCode();
+      hash ^= primitiveArray_.GetHashCode();
+      if (messageValue_ != null) hash ^= MessageValue.GetHashCode();
+      hash ^= messageArray_.GetHashCode();
+      if (EnumValue != global::UnitTest.Issues.TestProtos.DeprecatedEnum.DEPRECATED_ZERO) hash ^= EnumValue.GetHashCode();
+      hash ^= enumArray_.GetHashCode();
+      return hash;
+    }
 
-      private MyMessageBReferenceA PrepareBuilder() {
-        if (resultIsReadOnly) {
-          MyMessageBReferenceA original = result;
-          result = new MyMessageBReferenceA();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (PrimitiveValue != 0) {
+        output.WriteInt32(1, fieldNames[5], PrimitiveValue);
       }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
+      output.WritePackedInt32Array(2, fieldNames[4], primitiveArray_);
+      if (messageValue_ != null) {
+        output.WriteMessage(3, fieldNames[3], MessageValue);
       }
-
-      protected override MyMessageBReferenceA MessageBeingBuilt {
-        get { return PrepareBuilder(); }
+      output.WriteMessageArray(4, fieldNames[2], messageArray_);
+      if (EnumValue != global::UnitTest.Issues.TestProtos.DeprecatedEnum.DEPRECATED_ZERO) {
+        output.WriteEnum(5, fieldNames[1], EnumValue);
       }
+      output.WritePackedEnumArray(6, fieldNames[0], enumArray_);
+    }
 
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
+    public int CalculateSize() {
+      int size = 0;
+      if (PrimitiveValue != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveValue);
       }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
+      {
+        int dataSize = 0;
+        foreach (int element in primitiveArray_) {
+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (primitiveArray_.Count != 0) {
+          size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
         }
       }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Descriptor; }
+      if (messageValue_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(3, MessageValue);
       }
-
-      public override MyMessageBReferenceA DefaultInstanceForType {
-        get { return global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.DefaultInstance; }
+      foreach (global::UnitTest.Issues.TestProtos.DeprecatedChild element in messageArray_) {
+        size += pb::CodedOutputStream.ComputeMessageSize(4, element);
       }
-
-      public override MyMessageBReferenceA BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
+      if (EnumValue != global::UnitTest.Issues.TestProtos.DeprecatedEnum.DEPRECATED_ZERO) {
+        size += pb::CodedOutputStream.ComputeEnumSize(5, EnumValue);
       }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is MyMessageBReferenceA) {
-          return MergeFrom((MyMessageBReferenceA) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
+      {
+        int dataSize = 0;
+        if (enumArray_.Count > 0) {
+          foreach (global::UnitTest.Issues.TestProtos.DeprecatedEnum element in enumArray_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 1;
+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
         }
       }
-
-      public override Builder MergeFrom(MyMessageBReferenceA other) {
-        if (other == global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasValue) {
-          MergeValue(other.Value);
+      return size;
+    }
+    public void MergeFrom(DeprecatedFieldsMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.PrimitiveValue != 0) {
+        PrimitiveValue = other.PrimitiveValue;
+      }
+      primitiveArray_.Add(other.primitiveArray_);
+      if (other.messageValue_ != null) {
+        if (messageValue_ == null) {
+          messageValue_ = new global::UnitTest.Issues.TestProtos.DeprecatedChild();
         }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
+        MessageValue.MergeFrom(other.MessageValue);
       }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
+      messageArray_.Add(other.messageArray_);
+      if (other.EnumValue != global::UnitTest.Issues.TestProtos.DeprecatedEnum.DEPRECATED_ZERO) {
+        EnumValue = other.EnumValue;
       }
+      enumArray_.Add(other.enumArray_);
+    }
 
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_myMessageBReferenceAFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _myMessageBReferenceAFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
           }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
             }
-            case 10: {
-              global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Builder subBuilder = global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.CreateBuilder();
-              if (result.hasValue) {
-                subBuilder.MergeFrom(Value);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Value = subBuilder.BuildPartial();
-              break;
+            break;
+          case 8: {
+            input.ReadInt32(ref primitiveValue_);
+            break;
+          }
+          case 18:
+          case 16: {
+            input.ReadInt32Array(tag, fieldName, primitiveArray_);
+            break;
+          }
+          case 26: {
+            if (messageValue_ == null) {
+              messageValue_ = new global::UnitTest.Issues.TestProtos.DeprecatedChild();
             }
+            input.ReadMessage(messageValue_);
+            break;
+          }
+          case 34: {
+            input.ReadMessageArray(tag, fieldName, messageArray_, global::UnitTest.Issues.TestProtos.DeprecatedChild.Parser);
+            break;
+          }
+          case 40: {
+            input.ReadEnum(ref enumValue_);
+            break;
+          }
+          case 50:
+          case 48: {
+            input.ReadEnumArray<global::UnitTest.Issues.TestProtos.DeprecatedEnum>(tag, fieldName, enumArray_);
+            break;
           }
         }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasValue {
-       get { return result.hasValue; }
-      }
-      public global::UnitTest.Issues.TestProtos.MyMessageAReferenceB Value {
-        get { return result.Value; }
-        set { SetValue(value); }
-      }
-      public Builder SetValue(global::UnitTest.Issues.TestProtos.MyMessageAReferenceB value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasValue = true;
-        result.value_ = value;
-        return this;
-      }
-      public Builder SetValue(global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasValue = true;
-        result.value_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeValue(global::UnitTest.Issues.TestProtos.MyMessageAReferenceB value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasValue &&
-            result.value_ != global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.DefaultInstance) {
-            result.value_ = global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.CreateBuilder(result.value_).MergeFrom(value).BuildPartial();
-        } else {
-          result.value_ = value;
-        }
-        result.hasValue = true;
-        return this;
-      }
-      public Builder ClearValue() {
-        PrepareBuilder();
-        result.hasValue = false;
-        result.value_ = null;
-        return this;
       }
     }
-    static MyMessageBReferenceA() {
-      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnittestIssues.Descriptor, null);
-    }
+
   }
 
   [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class NegativeEnumMessage : pb::GeneratedMessage<NegativeEnumMessage, NegativeEnumMessage.Builder> {
-    private NegativeEnumMessage() { }
-    private static readonly NegativeEnumMessage defaultInstance = new NegativeEnumMessage().MakeReadOnly();
-    private static readonly string[] _negativeEnumMessageFieldNames = new string[] { "packed_values", "value", "values" };
-    private static readonly uint[] _negativeEnumMessageFieldTags = new uint[] { 26, 8, 16 };
-    public static NegativeEnumMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override NegativeEnumMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override NegativeEnumMessage ThisMessage {
-      get { return this; }
-    }
+  public sealed partial class ItemField : pb::IMessage<ItemField>, global::System.IEquatable<ItemField> {
+    private static readonly pb::MessageParser<ItemField> _parser = new pb::MessageParser<ItemField>(() => new ItemField());
+    public static pb::MessageParser<ItemField> Parser { get { return _parser; } }
 
+    private static readonly string[] _fieldNames = new string[] { "item" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
     public static pbd::MessageDescriptor Descriptor {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_NegativeEnumMessage__Descriptor; }
+      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_ItemField__Descriptor; }
     }
 
-    protected override pb::FieldAccess.FieldAccessorTable<NegativeEnumMessage, NegativeEnumMessage.Builder> InternalFieldAccessors {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_NegativeEnumMessage__FieldAccessorTable; }
+    public pb::FieldAccess.FieldAccessorTable<ItemField> Fields {
+      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_ItemField__FieldAccessorTable; }
     }
 
-    public const int ValueFieldNumber = 1;
-    private bool hasValue;
-    private global::UnitTest.Issues.TestProtos.NegativeEnum value_ = global::UnitTest.Issues.TestProtos.NegativeEnum.FiveBelow;
-    public bool HasValue {
-      get { return hasValue; }
+    public ItemField() { }
+    public ItemField(ItemField other) {
+      MergeFrom(other);
     }
-    public global::UnitTest.Issues.TestProtos.NegativeEnum Value {
-      get { return value_; }
+    public const int ItemFieldNumber = 1;
+    private int item_;
+    public int Item {
+      get { return item_; }
+      set { item_ = value; }
     }
 
-    public const int ValuesFieldNumber = 2;
-    private pbc::PopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum> values_ = new pbc::PopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum>();
-    public scg::IList<global::UnitTest.Issues.TestProtos.NegativeEnum> ValuesList {
-      get { return pbc::Lists.AsReadOnly(values_); }
-    }
-    public int ValuesCount {
-      get { return values_.Count; }
-    }
-    public global::UnitTest.Issues.TestProtos.NegativeEnum GetValues(int index) {
-      return values_[index];
-    }
 
-    public const int PackedValuesFieldNumber = 3;
-    private int packedValuesMemoizedSerializedSize;
-    private pbc::PopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum> packedValues_ = new pbc::PopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum>();
-    public scg::IList<global::UnitTest.Issues.TestProtos.NegativeEnum> PackedValuesList {
-      get { return pbc::Lists.AsReadOnly(packedValues_); }
-    }
-    public int PackedValuesCount {
-      get { return packedValues_.Count; }
-    }
-    public global::UnitTest.Issues.TestProtos.NegativeEnum GetPackedValues(int index) {
-      return packedValues_[index];
+    public override bool Equals(object other) {
+      return Equals(other as ItemField);
     }
 
-    public override bool IsInitialized {
-      get {
+    public bool Equals(ItemField other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
         return true;
       }
+      if (Item != other.Item) return false;
+      return true;
     }
 
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _negativeEnumMessageFieldNames;
-      if (hasValue) {
-        output.WriteEnum(1, field_names[1], (int) Value, Value);
-      }
-      if (values_.Count > 0) {
-        output.WriteEnumArray(2, field_names[2], values_);
-      }
-      if (packedValues_.Count > 0) {
-        output.WritePackedEnumArray(3, field_names[0], packedValuesMemoizedSerializedSize, packedValues_);
-      }
-      UnknownFields.WriteTo(output);
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Item != 0) hash ^= Item.GetHashCode();
+      return hash;
     }
 
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Item != 0) {
+        output.WriteInt32(1, fieldNames[0], Item);
       }
     }
 
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasValue) {
-        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Value);
+    public int CalculateSize() {
+      int size = 0;
+      if (Item != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, Item);
       }
-      {
-        int dataSize = 0;
-        if (values_.Count > 0) {
-          foreach (global::UnitTest.Issues.TestProtos.NegativeEnum element in values_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
+      return size;
+    }
+    public void MergeFrom(ItemField other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Item != 0) {
+        Item = other.Item;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref item_);
+            break;
           }
-          size += dataSize;
-          size += 1 * values_.Count;
         }
       }
-      {
-        int dataSize = 0;
-        if (packedValues_.Count > 0) {
-          foreach (global::UnitTest.Issues.TestProtos.NegativeEnum element in packedValues_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 1;
-          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
-        }
-        packedValuesMemoizedSerializedSize = dataSize;
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static NegativeEnumMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static NegativeEnumMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static NegativeEnumMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static NegativeEnumMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static NegativeEnumMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static NegativeEnumMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static NegativeEnumMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
     }
-    public static NegativeEnumMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static NegativeEnumMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static NegativeEnumMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private NegativeEnumMessage MakeReadOnly() {
-      values_.MakeReadOnly();
-      packedValues_.MakeReadOnly();
-      return this;
-    }
-
-    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(NegativeEnumMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<NegativeEnumMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(NegativeEnumMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private NegativeEnumMessage result;
-
-      private NegativeEnumMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          NegativeEnumMessage original = result;
-          result = new NegativeEnumMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
 
-      protected override NegativeEnumMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::UnitTest.Issues.TestProtos.NegativeEnumMessage.Descriptor; }
-      }
-
-      public override NegativeEnumMessage DefaultInstanceForType {
-        get { return global::UnitTest.Issues.TestProtos.NegativeEnumMessage.DefaultInstance; }
-      }
-
-      public override NegativeEnumMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is NegativeEnumMessage) {
-          return MergeFrom((NegativeEnumMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(NegativeEnumMessage other) {
-        if (other == global::UnitTest.Issues.TestProtos.NegativeEnumMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasValue) {
-          Value = other.Value;
-        }
-        if (other.values_.Count != 0) {
-          result.values_.Add(other.values_);
-        }
-        if (other.packedValues_.Count != 0) {
-          result.packedValues_.Add(other.packedValues_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_negativeEnumMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _negativeEnumMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              object unknown;
-              if(input.ReadEnum(ref result.value_, out unknown)) {
-                result.hasValue = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(1, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 18:
-            case 16: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::UnitTest.Issues.TestProtos.NegativeEnum>(tag, field_name, result.values_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(2, (ulong)(int)rawValue);
-              }
-              break;
-            }
-            case 26:
-            case 24: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::UnitTest.Issues.TestProtos.NegativeEnum>(tag, field_name, result.packedValues_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(3, (ulong)(int)rawValue);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasValue {
-        get { return result.hasValue; }
-      }
-      public global::UnitTest.Issues.TestProtos.NegativeEnum Value {
-        get { return result.Value; }
-        set { SetValue(value); }
-      }
-      public Builder SetValue(global::UnitTest.Issues.TestProtos.NegativeEnum value) {
-        PrepareBuilder();
-        result.hasValue = true;
-        result.value_ = value;
-        return this;
-      }
-      public Builder ClearValue() {
-        PrepareBuilder();
-        result.hasValue = false;
-        result.value_ = global::UnitTest.Issues.TestProtos.NegativeEnum.FiveBelow;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum> ValuesList {
-        get { return PrepareBuilder().values_; }
-      }
-      public int ValuesCount {
-        get { return result.ValuesCount; }
-      }
-      public global::UnitTest.Issues.TestProtos.NegativeEnum GetValues(int index) {
-        return result.GetValues(index);
-      }
-      public Builder SetValues(int index, global::UnitTest.Issues.TestProtos.NegativeEnum value) {
-        PrepareBuilder();
-        result.values_[index] = value;
-        return this;
-      }
-      public Builder AddValues(global::UnitTest.Issues.TestProtos.NegativeEnum value) {
-        PrepareBuilder();
-        result.values_.Add(value);
-        return this;
-      }
-      public Builder AddRangeValues(scg::IEnumerable<global::UnitTest.Issues.TestProtos.NegativeEnum> values) {
-        PrepareBuilder();
-        result.values_.Add(values);
-        return this;
-      }
-      public Builder ClearValues() {
-        PrepareBuilder();
-        result.values_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum> PackedValuesList {
-        get { return PrepareBuilder().packedValues_; }
-      }
-      public int PackedValuesCount {
-        get { return result.PackedValuesCount; }
-      }
-      public global::UnitTest.Issues.TestProtos.NegativeEnum GetPackedValues(int index) {
-        return result.GetPackedValues(index);
-      }
-      public Builder SetPackedValues(int index, global::UnitTest.Issues.TestProtos.NegativeEnum value) {
-        PrepareBuilder();
-        result.packedValues_[index] = value;
-        return this;
-      }
-      public Builder AddPackedValues(global::UnitTest.Issues.TestProtos.NegativeEnum value) {
-        PrepareBuilder();
-        result.packedValues_.Add(value);
-        return this;
-      }
-      public Builder AddRangePackedValues(scg::IEnumerable<global::UnitTest.Issues.TestProtos.NegativeEnum> values) {
-        PrepareBuilder();
-        result.packedValues_.Add(values);
-        return this;
-      }
-      public Builder ClearPackedValues() {
-        PrepareBuilder();
-        result.packedValues_.Clear();
-        return this;
-      }
-    }
-    static NegativeEnumMessage() {
-      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnittestIssues.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class DeprecatedChild : pb::GeneratedMessage<DeprecatedChild, DeprecatedChild.Builder> {
-    private DeprecatedChild() { }
-    private static readonly DeprecatedChild defaultInstance = new DeprecatedChild().MakeReadOnly();
-    private static readonly string[] _deprecatedChildFieldNames = new string[] {  };
-    private static readonly uint[] _deprecatedChildFieldTags = new uint[] {  };
-    public static DeprecatedChild DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override DeprecatedChild DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override DeprecatedChild ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_DeprecatedChild__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<DeprecatedChild, DeprecatedChild.Builder> InternalFieldAccessors {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_DeprecatedChild__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _deprecatedChildFieldNames;
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static DeprecatedChild ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DeprecatedChild ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DeprecatedChild ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DeprecatedChild ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DeprecatedChild ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DeprecatedChild ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static DeprecatedChild ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static DeprecatedChild ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static DeprecatedChild ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DeprecatedChild ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private DeprecatedChild MakeReadOnly() {
-      return this;
-    }
-
-    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(DeprecatedChild prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<DeprecatedChild, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(DeprecatedChild cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private DeprecatedChild result;
-
-      private DeprecatedChild PrepareBuilder() {
-        if (resultIsReadOnly) {
-          DeprecatedChild original = result;
-          result = new DeprecatedChild();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override DeprecatedChild MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::UnitTest.Issues.TestProtos.DeprecatedChild.Descriptor; }
-      }
-
-      public override DeprecatedChild DefaultInstanceForType {
-        get { return global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance; }
-      }
-
-      public override DeprecatedChild BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is DeprecatedChild) {
-          return MergeFrom((DeprecatedChild) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(DeprecatedChild other) {
-        if (other == global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance) return this;
-        PrepareBuilder();
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_deprecatedChildFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _deprecatedChildFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static DeprecatedChild() {
-      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnittestIssues.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class DeprecatedFieldsMessage : pb::GeneratedMessage<DeprecatedFieldsMessage, DeprecatedFieldsMessage.Builder> {
-    private DeprecatedFieldsMessage() { }
-    private static readonly DeprecatedFieldsMessage defaultInstance = new DeprecatedFieldsMessage().MakeReadOnly();
-    private static readonly string[] _deprecatedFieldsMessageFieldNames = new string[] { "EnumArray", "EnumValue", "MessageArray", "MessageValue", "PrimitiveArray", "PrimitiveValue" };
-    private static readonly uint[] _deprecatedFieldsMessageFieldTags = new uint[] { 48, 40, 34, 26, 16, 8 };
-    public static DeprecatedFieldsMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override DeprecatedFieldsMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override DeprecatedFieldsMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<DeprecatedFieldsMessage, DeprecatedFieldsMessage.Builder> InternalFieldAccessors {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_DeprecatedFieldsMessage__FieldAccessorTable; }
-    }
-
-    public const int PrimitiveValueFieldNumber = 1;
-    private bool hasPrimitiveValue;
-    private int primitiveValue_;
-    [global::System.ObsoleteAttribute()]
-    public bool HasPrimitiveValue {
-      get { return hasPrimitiveValue; }
-    }
-    [global::System.ObsoleteAttribute()]
-    public int PrimitiveValue {
-      get { return primitiveValue_; }
-    }
-
-    public const int PrimitiveArrayFieldNumber = 2;
-    private pbc::PopsicleList<int> primitiveArray_ = new pbc::PopsicleList<int>();
-    [global::System.ObsoleteAttribute()]
-    public scg::IList<int> PrimitiveArrayList {
-      get { return pbc::Lists.AsReadOnly(primitiveArray_); }
-    }
-    [global::System.ObsoleteAttribute()]
-    public int PrimitiveArrayCount {
-      get { return primitiveArray_.Count; }
-    }
-    [global::System.ObsoleteAttribute()]
-    public int GetPrimitiveArray(int index) {
-      return primitiveArray_[index];
-    }
-
-    public const int MessageValueFieldNumber = 3;
-    private bool hasMessageValue;
-    private global::UnitTest.Issues.TestProtos.DeprecatedChild messageValue_;
-    [global::System.ObsoleteAttribute()]
-    public bool HasMessageValue {
-      get { return hasMessageValue; }
-    }
-    [global::System.ObsoleteAttribute()]
-    public global::UnitTest.Issues.TestProtos.DeprecatedChild MessageValue {
-      get { return messageValue_ ?? global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance; }
-    }
-
-    public const int MessageArrayFieldNumber = 4;
-    private pbc::PopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedChild> messageArray_ = new pbc::PopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedChild>();
-    [global::System.ObsoleteAttribute()]
-    public scg::IList<global::UnitTest.Issues.TestProtos.DeprecatedChild> MessageArrayList {
-      get { return messageArray_; }
-    }
-    [global::System.ObsoleteAttribute()]
-    public int MessageArrayCount {
-      get { return messageArray_.Count; }
-    }
-    [global::System.ObsoleteAttribute()]
-    public global::UnitTest.Issues.TestProtos.DeprecatedChild GetMessageArray(int index) {
-      return messageArray_[index];
-    }
-
-    public const int EnumValueFieldNumber = 5;
-    private bool hasEnumValue;
-    private global::UnitTest.Issues.TestProtos.DeprecatedEnum enumValue_ = global::UnitTest.Issues.TestProtos.DeprecatedEnum.one;
-    [global::System.ObsoleteAttribute()]
-    public bool HasEnumValue {
-      get { return hasEnumValue; }
-    }
-    [global::System.ObsoleteAttribute()]
-    public global::UnitTest.Issues.TestProtos.DeprecatedEnum EnumValue {
-      get { return enumValue_; }
-    }
-
-    public const int EnumArrayFieldNumber = 6;
-    private pbc::PopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedEnum> enumArray_ = new pbc::PopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedEnum>();
-    [global::System.ObsoleteAttribute()]
-    public scg::IList<global::UnitTest.Issues.TestProtos.DeprecatedEnum> EnumArrayList {
-      get { return pbc::Lists.AsReadOnly(enumArray_); }
-    }
-    [global::System.ObsoleteAttribute()]
-    public int EnumArrayCount {
-      get { return enumArray_.Count; }
-    }
-    [global::System.ObsoleteAttribute()]
-    public global::UnitTest.Issues.TestProtos.DeprecatedEnum GetEnumArray(int index) {
-      return enumArray_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _deprecatedFieldsMessageFieldNames;
-      if (hasPrimitiveValue) {
-        output.WriteInt32(1, field_names[5], PrimitiveValue);
-      }
-      if (primitiveArray_.Count > 0) {
-        output.WriteInt32Array(2, field_names[4], primitiveArray_);
-      }
-      if (hasMessageValue) {
-        output.WriteMessage(3, field_names[3], MessageValue);
-      }
-      if (messageArray_.Count > 0) {
-        output.WriteMessageArray(4, field_names[2], messageArray_);
-      }
-      if (hasEnumValue) {
-        output.WriteEnum(5, field_names[1], (int) EnumValue, EnumValue);
-      }
-      if (enumArray_.Count > 0) {
-        output.WriteEnumArray(6, field_names[0], enumArray_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasPrimitiveValue) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveValue);
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in PrimitiveArrayList) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        size += 1 * primitiveArray_.Count;
-      }
-      if (hasMessageValue) {
-        size += pb::CodedOutputStream.ComputeMessageSize(3, MessageValue);
-      }
-      foreach (global::UnitTest.Issues.TestProtos.DeprecatedChild element in MessageArrayList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(4, element);
-      }
-      if (hasEnumValue) {
-        size += pb::CodedOutputStream.ComputeEnumSize(5, (int) EnumValue);
-      }
-      {
-        int dataSize = 0;
-        if (enumArray_.Count > 0) {
-          foreach (global::UnitTest.Issues.TestProtos.DeprecatedEnum element in enumArray_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 1 * enumArray_.Count;
-        }
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static DeprecatedFieldsMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DeprecatedFieldsMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private DeprecatedFieldsMessage MakeReadOnly() {
-      primitiveArray_.MakeReadOnly();
-      messageArray_.MakeReadOnly();
-      enumArray_.MakeReadOnly();
-      return this;
-    }
-
-    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(DeprecatedFieldsMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<DeprecatedFieldsMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(DeprecatedFieldsMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private DeprecatedFieldsMessage result;
-
-      private DeprecatedFieldsMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          DeprecatedFieldsMessage original = result;
-          result = new DeprecatedFieldsMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override DeprecatedFieldsMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.Descriptor; }
-      }
-
-      public override DeprecatedFieldsMessage DefaultInstanceForType {
-        get { return global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.DefaultInstance; }
-      }
-
-      public override DeprecatedFieldsMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is DeprecatedFieldsMessage) {
-          return MergeFrom((DeprecatedFieldsMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(DeprecatedFieldsMessage other) {
-        if (other == global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasPrimitiveValue) {
-          PrimitiveValue = other.PrimitiveValue;
-        }
-        if (other.primitiveArray_.Count != 0) {
-          result.primitiveArray_.Add(other.primitiveArray_);
-        }
-        if (other.HasMessageValue) {
-          MergeMessageValue(other.MessageValue);
-        }
-        if (other.messageArray_.Count != 0) {
-          result.messageArray_.Add(other.messageArray_);
-        }
-        if (other.HasEnumValue) {
-          EnumValue = other.EnumValue;
-        }
-        if (other.enumArray_.Count != 0) {
-          result.enumArray_.Add(other.enumArray_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_deprecatedFieldsMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _deprecatedFieldsMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasPrimitiveValue = input.ReadInt32(ref result.primitiveValue_);
-              break;
-            }
-            case 18:
-            case 16: {
-              input.ReadInt32Array(tag, field_name, result.primitiveArray_);
-              break;
-            }
-            case 26: {
-              global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder subBuilder = global::UnitTest.Issues.TestProtos.DeprecatedChild.CreateBuilder();
-              if (result.hasMessageValue) {
-                subBuilder.MergeFrom(MessageValue);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              MessageValue = subBuilder.BuildPartial();
-              break;
-            }
-            case 34: {
-              input.ReadMessageArray(tag, field_name, result.messageArray_, global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 40: {
-              object unknown;
-              if(input.ReadEnum(ref result.enumValue_, out unknown)) {
-                result.hasEnumValue = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(5, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 50:
-            case 48: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::UnitTest.Issues.TestProtos.DeprecatedEnum>(tag, field_name, result.enumArray_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(6, (ulong)(int)rawValue);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      [global::System.ObsoleteAttribute()]
-      public bool HasPrimitiveValue {
-        get { return result.hasPrimitiveValue; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public int PrimitiveValue {
-        get { return result.PrimitiveValue; }
-        set { SetPrimitiveValue(value); }
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetPrimitiveValue(int value) {
-        PrepareBuilder();
-        result.hasPrimitiveValue = true;
-        result.primitiveValue_ = value;
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder ClearPrimitiveValue() {
-        PrepareBuilder();
-        result.hasPrimitiveValue = false;
-        result.primitiveValue_ = 0;
-        return this;
-      }
-
-      [global::System.ObsoleteAttribute()]
-      public pbc::IPopsicleList<int> PrimitiveArrayList {
-        get { return PrepareBuilder().primitiveArray_; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public int PrimitiveArrayCount {
-        get { return result.PrimitiveArrayCount; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public int GetPrimitiveArray(int index) {
-        return result.GetPrimitiveArray(index);
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetPrimitiveArray(int index, int value) {
-        PrepareBuilder();
-        result.primitiveArray_[index] = value;
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder AddPrimitiveArray(int value) {
-        PrepareBuilder();
-        result.primitiveArray_.Add(value);
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder AddRangePrimitiveArray(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.primitiveArray_.Add(values);
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder ClearPrimitiveArray() {
-        PrepareBuilder();
-        result.primitiveArray_.Clear();
-        return this;
-      }
-
-      [global::System.ObsoleteAttribute()]
-      public bool HasMessageValue {
-       get { return result.hasMessageValue; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public global::UnitTest.Issues.TestProtos.DeprecatedChild MessageValue {
-        get { return result.MessageValue; }
-        set { SetMessageValue(value); }
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetMessageValue(global::UnitTest.Issues.TestProtos.DeprecatedChild value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasMessageValue = true;
-        result.messageValue_ = value;
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetMessageValue(global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasMessageValue = true;
-        result.messageValue_ = builderForValue.Build();
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder MergeMessageValue(global::UnitTest.Issues.TestProtos.DeprecatedChild value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasMessageValue &&
-            result.messageValue_ != global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance) {
-            result.messageValue_ = global::UnitTest.Issues.TestProtos.DeprecatedChild.CreateBuilder(result.messageValue_).MergeFrom(value).BuildPartial();
-        } else {
-          result.messageValue_ = value;
-        }
-        result.hasMessageValue = true;
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder ClearMessageValue() {
-        PrepareBuilder();
-        result.hasMessageValue = false;
-        result.messageValue_ = null;
-        return this;
-      }
-
-      [global::System.ObsoleteAttribute()]
-      public pbc::IPopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedChild> MessageArrayList {
-        get { return PrepareBuilder().messageArray_; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public int MessageArrayCount {
-        get { return result.MessageArrayCount; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public global::UnitTest.Issues.TestProtos.DeprecatedChild GetMessageArray(int index) {
-        return result.GetMessageArray(index);
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetMessageArray(int index, global::UnitTest.Issues.TestProtos.DeprecatedChild value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.messageArray_[index] = value;
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetMessageArray(int index, global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.messageArray_[index] = builderForValue.Build();
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder AddMessageArray(global::UnitTest.Issues.TestProtos.DeprecatedChild value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.messageArray_.Add(value);
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder AddMessageArray(global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.messageArray_.Add(builderForValue.Build());
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder AddRangeMessageArray(scg::IEnumerable<global::UnitTest.Issues.TestProtos.DeprecatedChild> values) {
-        PrepareBuilder();
-        result.messageArray_.Add(values);
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder ClearMessageArray() {
-        PrepareBuilder();
-        result.messageArray_.Clear();
-        return this;
-      }
-
-      [global::System.ObsoleteAttribute()]
-      public bool HasEnumValue {
-        get { return result.hasEnumValue; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public global::UnitTest.Issues.TestProtos.DeprecatedEnum EnumValue {
-        get { return result.EnumValue; }
-        set { SetEnumValue(value); }
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetEnumValue(global::UnitTest.Issues.TestProtos.DeprecatedEnum value) {
-        PrepareBuilder();
-        result.hasEnumValue = true;
-        result.enumValue_ = value;
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder ClearEnumValue() {
-        PrepareBuilder();
-        result.hasEnumValue = false;
-        result.enumValue_ = global::UnitTest.Issues.TestProtos.DeprecatedEnum.one;
-        return this;
-      }
-
-      [global::System.ObsoleteAttribute()]
-      public pbc::IPopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedEnum> EnumArrayList {
-        get { return PrepareBuilder().enumArray_; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public int EnumArrayCount {
-        get { return result.EnumArrayCount; }
-      }
-      [global::System.ObsoleteAttribute()]
-      public global::UnitTest.Issues.TestProtos.DeprecatedEnum GetEnumArray(int index) {
-        return result.GetEnumArray(index);
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder SetEnumArray(int index, global::UnitTest.Issues.TestProtos.DeprecatedEnum value) {
-        PrepareBuilder();
-        result.enumArray_[index] = value;
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder AddEnumArray(global::UnitTest.Issues.TestProtos.DeprecatedEnum value) {
-        PrepareBuilder();
-        result.enumArray_.Add(value);
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder AddRangeEnumArray(scg::IEnumerable<global::UnitTest.Issues.TestProtos.DeprecatedEnum> values) {
-        PrepareBuilder();
-        result.enumArray_.Add(values);
-        return this;
-      }
-      [global::System.ObsoleteAttribute()]
-      public Builder ClearEnumArray() {
-        PrepareBuilder();
-        result.enumArray_.Clear();
-        return this;
-      }
-    }
-    static DeprecatedFieldsMessage() {
-      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnittestIssues.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class ItemField : pb::GeneratedMessage<ItemField, ItemField.Builder> {
-    private ItemField() { }
-    private static readonly ItemField defaultInstance = new ItemField().MakeReadOnly();
-    private static readonly string[] _itemFieldFieldNames = new string[] { "item" };
-    private static readonly uint[] _itemFieldFieldTags = new uint[] { 8 };
-    public static ItemField DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override ItemField DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override ItemField ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_ItemField__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<ItemField, ItemField.Builder> InternalFieldAccessors {
-      get { return global::UnitTest.Issues.TestProtos.UnittestIssues.internal__static_unittest_issues_ItemField__FieldAccessorTable; }
-    }
-
-    public const int ItemFieldNumber = 1;
-    private bool hasItem;
-    private int item_;
-    public bool HasItem {
-      get { return hasItem; }
-    }
-    public int Item {
-      get { return item_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _itemFieldFieldNames;
-      if (hasItem) {
-        output.WriteInt32(1, field_names[0], Item);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasItem) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, Item);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static ItemField ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ItemField ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ItemField ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ItemField ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ItemField ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ItemField ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ItemField ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ItemField ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ItemField ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ItemField ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ItemField MakeReadOnly() {
-      return this;
-    }
-
-    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(ItemField prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<ItemField, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ItemField cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private ItemField result;
-
-      private ItemField PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ItemField original = result;
-          result = new ItemField();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override ItemField MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::UnitTest.Issues.TestProtos.ItemField.Descriptor; }
-      }
-
-      public override ItemField DefaultInstanceForType {
-        get { return global::UnitTest.Issues.TestProtos.ItemField.DefaultInstance; }
-      }
-
-      public override ItemField BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ItemField) {
-          return MergeFrom((ItemField) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(ItemField other) {
-        if (other == global::UnitTest.Issues.TestProtos.ItemField.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasItem) {
-          Item = other.Item;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_itemFieldFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _itemFieldFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              result.hasItem = input.ReadInt32(ref result.item_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasItem {
-        get { return result.hasItem; }
-      }
-      public int Item {
-        get { return result.Item; }
-        set { SetItem(value); }
-      }
-      public Builder SetItem(int value) {
-        PrepareBuilder();
-        result.hasItem = true;
-        result.item_ = value;
-        return this;
-      }
-      public Builder ClearItem() {
-        PrepareBuilder();
-        result.hasItem = false;
-        result.item_ = 0;
-        return this;
-      }
-    }
-    static ItemField() {
-      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnittestIssues.Descriptor, null);
-    }
   }
 
   #endregion

+ 0 - 1824
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestMset.cs

@@ -1,1824 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unittest_mset.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnittestMset {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.MessageSetExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.MessageSetExtension);
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageSet__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSet, global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder> internal__static_protobuf_unittest_TestMessageSet__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageSetContainer__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer, global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.Builder> internal__static_protobuf_unittest_TestMessageSetContainer__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageSetExtension1__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1, global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.Builder> internal__static_protobuf_unittest_TestMessageSetExtension1__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageSetExtension2__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2, global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.Builder> internal__static_protobuf_unittest_TestMessageSetExtension2__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RawMessageSet__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Builder> internal__static_protobuf_unittest_RawMessageSet__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RawMessageSet_Item__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder> internal__static_protobuf_unittest_RawMessageSet_Item__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnittestMset() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "CiNnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbXNldC5wcm90bxIRcHJvdG9i", 
-            "dWZfdW5pdHRlc3QiHgoOVGVzdE1lc3NhZ2VTZXQqCAgEEP////8HOgIIASJR", 
-            "ChdUZXN0TWVzc2FnZVNldENvbnRhaW5lchI2CgttZXNzYWdlX3NldBgBIAEo", 
-            "CzIhLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNZXNzYWdlU2V0IpYBChhUZXN0", 
-            "TWVzc2FnZVNldEV4dGVuc2lvbjESCQoBaRgPIAEoBTJvChVtZXNzYWdlX3Nl", 
-            "dF9leHRlbnNpb24SIS5wcm90b2J1Zl91bml0dGVzdC5UZXN0TWVzc2FnZVNl", 
-            "dBiwpl4gASgLMisucHJvdG9idWZfdW5pdHRlc3QuVGVzdE1lc3NhZ2VTZXRF", 
-            "eHRlbnNpb24xIpgBChhUZXN0TWVzc2FnZVNldEV4dGVuc2lvbjISCwoDc3Ry", 
-            "GBkgASgJMm8KFW1lc3NhZ2Vfc2V0X2V4dGVuc2lvbhIhLnByb3RvYnVmX3Vu", 
-            "aXR0ZXN0LlRlc3RNZXNzYWdlU2V0GPm7XiABKAsyKy5wcm90b2J1Zl91bml0", 
-            "dGVzdC5UZXN0TWVzc2FnZVNldEV4dGVuc2lvbjIibgoNUmF3TWVzc2FnZVNl", 
-            "dBIzCgRpdGVtGAEgAygKMiUucHJvdG9idWZfdW5pdHRlc3QuUmF3TWVzc2Fn", 
-            "ZVNldC5JdGVtGigKBEl0ZW0SDwoHdHlwZV9pZBgCIAIoBRIPCgdtZXNzYWdl", 
-            "GAMgAigMQilIAfgBAaoCIUdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVzdFBy", 
-          "b3Rvcw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_TestMessageSet__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_TestMessageSet__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSet, global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder>(internal__static_protobuf_unittest_TestMessageSet__Descriptor,
-                new string[] { });
-        internal__static_protobuf_unittest_TestMessageSetContainer__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_protobuf_unittest_TestMessageSetContainer__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer, global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.Builder>(internal__static_protobuf_unittest_TestMessageSetContainer__Descriptor,
-                new string[] { "MessageSet", });
-        internal__static_protobuf_unittest_TestMessageSetExtension1__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_protobuf_unittest_TestMessageSetExtension1__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1, global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.Builder>(internal__static_protobuf_unittest_TestMessageSetExtension1__Descriptor,
-                new string[] { "I", });
-        global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.MessageSetExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.Descriptor.Extensions[0]);
-        internal__static_protobuf_unittest_TestMessageSetExtension2__Descriptor = Descriptor.MessageTypes[3];
-        internal__static_protobuf_unittest_TestMessageSetExtension2__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2, global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.Builder>(internal__static_protobuf_unittest_TestMessageSetExtension2__Descriptor,
-                new string[] { "Str", });
-        global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.MessageSetExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.Descriptor.Extensions[0]);
-        internal__static_protobuf_unittest_RawMessageSet__Descriptor = Descriptor.MessageTypes[4];
-        internal__static_protobuf_unittest_RawMessageSet__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Builder>(internal__static_protobuf_unittest_RawMessageSet__Descriptor,
-                new string[] { "Item", });
-        internal__static_protobuf_unittest_RawMessageSet_Item__Descriptor = internal__static_protobuf_unittest_RawMessageSet__Descriptor.NestedTypes[0];
-        internal__static_protobuf_unittest_RawMessageSet_Item__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder>(internal__static_protobuf_unittest_RawMessageSet_Item__Descriptor,
-                new string[] { "TypeId", "Message", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestMessageSet : pb::ExtendableMessage<TestMessageSet, TestMessageSet.Builder> {
-    private TestMessageSet() { }
-    private static readonly TestMessageSet defaultInstance = new TestMessageSet().MakeReadOnly();
-    private static readonly string[] _testMessageSetFieldNames = new string[] {  };
-    private static readonly uint[] _testMessageSetFieldTags = new uint[] {  };
-    public static TestMessageSet DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestMessageSet DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestMessageSet ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_TestMessageSet__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestMessageSet, TestMessageSet.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_TestMessageSet__FieldAccessorTable; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        if (!ExtensionsAreInitialized) return false;
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testMessageSetFieldNames;
-      pb::ExtendableMessage<TestMessageSet, TestMessageSet.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);
-      extensionWriter.WriteUntil(2147483647, output);
-      UnknownFields.WriteAsMessageSetTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += ExtensionsSerializedSize;
-      size += UnknownFields.SerializedSizeAsMessageSet;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestMessageSet ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSet ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSet ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSet ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestMessageSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestMessageSet ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestMessageSet MakeReadOnly() {
-      return this;
-    }
-
-    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(TestMessageSet prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestMessageSet, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestMessageSet cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestMessageSet result;
-
-      private TestMessageSet PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestMessageSet original = result;
-          result = new TestMessageSet();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestMessageSet MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Descriptor; }
-      }
-
-      public override TestMessageSet DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance; }
-      }
-
-      public override TestMessageSet BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestMessageSet) {
-          return MergeFrom((TestMessageSet) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestMessageSet other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance) return this;
-        PrepareBuilder();
-          this.MergeExtensionFields(other);
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testMessageSetFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testMessageSetFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-    }
-    static TestMessageSet() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestMset.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestMessageSetContainer : pb::GeneratedMessage<TestMessageSetContainer, TestMessageSetContainer.Builder> {
-    private TestMessageSetContainer() { }
-    private static readonly TestMessageSetContainer defaultInstance = new TestMessageSetContainer().MakeReadOnly();
-    private static readonly string[] _testMessageSetContainerFieldNames = new string[] { "message_set" };
-    private static readonly uint[] _testMessageSetContainerFieldTags = new uint[] { 10 };
-    public static TestMessageSetContainer DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestMessageSetContainer DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestMessageSetContainer ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_TestMessageSetContainer__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestMessageSetContainer, TestMessageSetContainer.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_TestMessageSetContainer__FieldAccessorTable; }
-    }
-
-    public const int MessageSetFieldNumber = 1;
-    private bool hasMessageSet;
-    private global::Google.ProtocolBuffers.TestProtos.TestMessageSet messageSet_;
-    public bool HasMessageSet {
-      get { return hasMessageSet; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestMessageSet MessageSet {
-      get { return messageSet_ ?? global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testMessageSetContainerFieldNames;
-      if (hasMessageSet) {
-        output.WriteMessage(1, field_names[0], MessageSet);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasMessageSet) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, MessageSet);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestMessageSetContainer ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageSetContainer ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestMessageSetContainer MakeReadOnly() {
-      return this;
-    }
-
-    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(TestMessageSetContainer prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestMessageSetContainer, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestMessageSetContainer cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestMessageSetContainer result;
-
-      private TestMessageSetContainer PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestMessageSetContainer original = result;
-          result = new TestMessageSetContainer();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestMessageSetContainer MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.Descriptor; }
-      }
-
-      public override TestMessageSetContainer DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.DefaultInstance; }
-      }
-
-      public override TestMessageSetContainer BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestMessageSetContainer) {
-          return MergeFrom((TestMessageSetContainer) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestMessageSetContainer other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasMessageSet) {
-          MergeMessageSet(other.MessageSet);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testMessageSetContainerFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testMessageSetContainerFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMessageSet.CreateBuilder();
-              if (result.hasMessageSet) {
-                subBuilder.MergeFrom(MessageSet);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              MessageSet = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasMessageSet {
-       get { return result.hasMessageSet; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestMessageSet MessageSet {
-        get { return result.MessageSet; }
-        set { SetMessageSet(value); }
-      }
-      public Builder SetMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasMessageSet = true;
-        result.messageSet_ = value;
-        return this;
-      }
-      public Builder SetMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasMessageSet = true;
-        result.messageSet_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasMessageSet &&
-            result.messageSet_ != global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance) {
-            result.messageSet_ = global::Google.ProtocolBuffers.TestProtos.TestMessageSet.CreateBuilder(result.messageSet_).MergeFrom(value).BuildPartial();
-        } else {
-          result.messageSet_ = value;
-        }
-        result.hasMessageSet = true;
-        return this;
-      }
-      public Builder ClearMessageSet() {
-        PrepareBuilder();
-        result.hasMessageSet = false;
-        result.messageSet_ = null;
-        return this;
-      }
-    }
-    static TestMessageSetContainer() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestMset.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestMessageSetExtension1 : pb::GeneratedMessage<TestMessageSetExtension1, TestMessageSetExtension1.Builder> {
-    private TestMessageSetExtension1() { }
-    private static readonly TestMessageSetExtension1 defaultInstance = new TestMessageSetExtension1().MakeReadOnly();
-    private static readonly string[] _testMessageSetExtension1FieldNames = new string[] { "i" };
-    private static readonly uint[] _testMessageSetExtension1FieldTags = new uint[] { 120 };
-    public static TestMessageSetExtension1 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestMessageSetExtension1 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestMessageSetExtension1 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_TestMessageSetExtension1__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestMessageSetExtension1, TestMessageSetExtension1.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_TestMessageSetExtension1__FieldAccessorTable; }
-    }
-
-    public const int MessageSetExtensionFieldNumber = 1545008;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1> MessageSetExtension;
-    public const int IFieldNumber = 15;
-    private bool hasI;
-    private int i_;
-    public bool HasI {
-      get { return hasI; }
-    }
-    public int I {
-      get { return i_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testMessageSetExtension1FieldNames;
-      if (hasI) {
-        output.WriteInt32(15, field_names[0], I);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasI) {
-        size += pb::CodedOutputStream.ComputeInt32Size(15, I);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestMessageSetExtension1 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageSetExtension1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestMessageSetExtension1 MakeReadOnly() {
-      return this;
-    }
-
-    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(TestMessageSetExtension1 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestMessageSetExtension1, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestMessageSetExtension1 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestMessageSetExtension1 result;
-
-      private TestMessageSetExtension1 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestMessageSetExtension1 original = result;
-          result = new TestMessageSetExtension1();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestMessageSetExtension1 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.Descriptor; }
-      }
-
-      public override TestMessageSetExtension1 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.DefaultInstance; }
-      }
-
-      public override TestMessageSetExtension1 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestMessageSetExtension1) {
-          return MergeFrom((TestMessageSetExtension1) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestMessageSetExtension1 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasI) {
-          I = other.I;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testMessageSetExtension1FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testMessageSetExtension1FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 120: {
-              result.hasI = input.ReadInt32(ref result.i_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasI {
-        get { return result.hasI; }
-      }
-      public int I {
-        get { return result.I; }
-        set { SetI(value); }
-      }
-      public Builder SetI(int value) {
-        PrepareBuilder();
-        result.hasI = true;
-        result.i_ = value;
-        return this;
-      }
-      public Builder ClearI() {
-        PrepareBuilder();
-        result.hasI = false;
-        result.i_ = 0;
-        return this;
-      }
-    }
-    static TestMessageSetExtension1() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestMset.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestMessageSetExtension2 : pb::GeneratedMessage<TestMessageSetExtension2, TestMessageSetExtension2.Builder> {
-    private TestMessageSetExtension2() { }
-    private static readonly TestMessageSetExtension2 defaultInstance = new TestMessageSetExtension2().MakeReadOnly();
-    private static readonly string[] _testMessageSetExtension2FieldNames = new string[] { "str" };
-    private static readonly uint[] _testMessageSetExtension2FieldTags = new uint[] { 202 };
-    public static TestMessageSetExtension2 DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestMessageSetExtension2 DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestMessageSetExtension2 ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_TestMessageSetExtension2__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestMessageSetExtension2, TestMessageSetExtension2.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_TestMessageSetExtension2__FieldAccessorTable; }
-    }
-
-    public const int MessageSetExtensionFieldNumber = 1547769;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2> MessageSetExtension;
-    public const int StrFieldNumber = 25;
-    private bool hasStr;
-    private string str_ = "";
-    public bool HasStr {
-      get { return hasStr; }
-    }
-    public string Str {
-      get { return str_; }
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testMessageSetExtension2FieldNames;
-      if (hasStr) {
-        output.WriteString(25, field_names[0], Str);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasStr) {
-        size += pb::CodedOutputStream.ComputeStringSize(25, Str);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestMessageSetExtension2 ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestMessageSetExtension2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestMessageSetExtension2 MakeReadOnly() {
-      return this;
-    }
-
-    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(TestMessageSetExtension2 prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestMessageSetExtension2, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestMessageSetExtension2 cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestMessageSetExtension2 result;
-
-      private TestMessageSetExtension2 PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestMessageSetExtension2 original = result;
-          result = new TestMessageSetExtension2();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestMessageSetExtension2 MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.Descriptor; }
-      }
-
-      public override TestMessageSetExtension2 DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.DefaultInstance; }
-      }
-
-      public override TestMessageSetExtension2 BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestMessageSetExtension2) {
-          return MergeFrom((TestMessageSetExtension2) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestMessageSetExtension2 other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasStr) {
-          Str = other.Str;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testMessageSetExtension2FieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testMessageSetExtension2FieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 202: {
-              result.hasStr = input.ReadString(ref result.str_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasStr {
-        get { return result.hasStr; }
-      }
-      public string Str {
-        get { return result.Str; }
-        set { SetStr(value); }
-      }
-      public Builder SetStr(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasStr = true;
-        result.str_ = value;
-        return this;
-      }
-      public Builder ClearStr() {
-        PrepareBuilder();
-        result.hasStr = false;
-        result.str_ = "";
-        return this;
-      }
-    }
-    static TestMessageSetExtension2() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestMset.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class RawMessageSet : pb::GeneratedMessage<RawMessageSet, RawMessageSet.Builder> {
-    private RawMessageSet() { }
-    private static readonly RawMessageSet defaultInstance = new RawMessageSet().MakeReadOnly();
-    private static readonly string[] _rawMessageSetFieldNames = new string[] { "item" };
-    private static readonly uint[] _rawMessageSetFieldTags = new uint[] { 11 };
-    public static RawMessageSet DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override RawMessageSet DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override RawMessageSet ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_RawMessageSet__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<RawMessageSet, RawMessageSet.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_RawMessageSet__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Item : pb::GeneratedMessage<Item, Item.Builder> {
-        private Item() { }
-        private static readonly Item defaultInstance = new Item().MakeReadOnly();
-        private static readonly string[] _itemFieldNames = new string[] { "message", "type_id" };
-        private static readonly uint[] _itemFieldTags = new uint[] { 26, 16 };
-        public static Item DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override Item DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override Item ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_RawMessageSet_Item__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<Item, Item.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.UnittestMset.internal__static_protobuf_unittest_RawMessageSet_Item__FieldAccessorTable; }
-        }
-
-        public const int TypeIdFieldNumber = 2;
-        private bool hasTypeId;
-        private int typeId_;
-        public bool HasTypeId {
-          get { return hasTypeId; }
-        }
-        public int TypeId {
-          get { return typeId_; }
-        }
-
-        public const int MessageFieldNumber = 3;
-        private bool hasMessage;
-        private pb::ByteString message_ = pb::ByteString.Empty;
-        public bool HasMessage {
-          get { return hasMessage; }
-        }
-        public pb::ByteString Message {
-          get { return message_; }
-        }
-
-        public override bool IsInitialized {
-          get {
-            if (!hasTypeId) return false;
-            if (!hasMessage) return false;
-            return true;
-          }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _itemFieldNames;
-          if (hasTypeId) {
-            output.WriteInt32(2, field_names[1], TypeId);
-          }
-          if (hasMessage) {
-            output.WriteBytes(3, field_names[0], Message);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (hasTypeId) {
-            size += pb::CodedOutputStream.ComputeInt32Size(2, TypeId);
-          }
-          if (hasMessage) {
-            size += pb::CodedOutputStream.ComputeBytesSize(3, Message);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static Item ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Item ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Item ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static Item ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static Item ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Item ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static Item ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static Item ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static Item ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static Item ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private Item MakeReadOnly() {
-          return this;
-        }
-
-        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(Item prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<Item, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(Item cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private Item result;
-
-          private Item PrepareBuilder() {
-            if (resultIsReadOnly) {
-              Item original = result;
-              result = new Item();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override Item MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Descriptor; }
-          }
-
-          public override Item DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.DefaultInstance; }
-          }
-
-          public override Item BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is Item) {
-              return MergeFrom((Item) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(Item other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.HasTypeId) {
-              TypeId = other.TypeId;
-            }
-            if (other.HasMessage) {
-              Message = other.Message;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_itemFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _itemFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 16: {
-                  result.hasTypeId = input.ReadInt32(ref result.typeId_);
-                  break;
-                }
-                case 26: {
-                  result.hasMessage = input.ReadBytes(ref result.message_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public bool HasTypeId {
-            get { return result.hasTypeId; }
-          }
-          public int TypeId {
-            get { return result.TypeId; }
-            set { SetTypeId(value); }
-          }
-          public Builder SetTypeId(int value) {
-            PrepareBuilder();
-            result.hasTypeId = true;
-            result.typeId_ = value;
-            return this;
-          }
-          public Builder ClearTypeId() {
-            PrepareBuilder();
-            result.hasTypeId = false;
-            result.typeId_ = 0;
-            return this;
-          }
-
-          public bool HasMessage {
-            get { return result.hasMessage; }
-          }
-          public pb::ByteString Message {
-            get { return result.Message; }
-            set { SetMessage(value); }
-          }
-          public Builder SetMessage(pb::ByteString value) {
-            pb::ThrowHelper.ThrowIfNull(value, "value");
-            PrepareBuilder();
-            result.hasMessage = true;
-            result.message_ = value;
-            return this;
-          }
-          public Builder ClearMessage() {
-            PrepareBuilder();
-            result.hasMessage = false;
-            result.message_ = pb::ByteString.Empty;
-            return this;
-          }
-        }
-        static Item() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestMset.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    public const int ItemFieldNumber = 1;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item> item_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item> ItemList {
-      get { return item_; }
-    }
-    public int ItemCount {
-      get { return item_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item GetItem(int index) {
-      return item_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _rawMessageSetFieldNames;
-      if (item_.Count > 0) {
-        output.WriteGroupArray(1, field_names[0], item_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      foreach (global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item element in ItemList) {
-        size += pb::CodedOutputStream.ComputeGroupSize(1, element);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static RawMessageSet ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static RawMessageSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static RawMessageSet ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static RawMessageSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static RawMessageSet ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static RawMessageSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static RawMessageSet ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static RawMessageSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static RawMessageSet ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static RawMessageSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private RawMessageSet MakeReadOnly() {
-      item_.MakeReadOnly();
-      return this;
-    }
-
-    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(RawMessageSet prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<RawMessageSet, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(RawMessageSet cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private RawMessageSet result;
-
-      private RawMessageSet PrepareBuilder() {
-        if (resultIsReadOnly) {
-          RawMessageSet original = result;
-          result = new RawMessageSet();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override RawMessageSet MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Descriptor; }
-      }
-
-      public override RawMessageSet DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.RawMessageSet.DefaultInstance; }
-      }
-
-      public override RawMessageSet BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is RawMessageSet) {
-          return MergeFrom((RawMessageSet) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(RawMessageSet other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.RawMessageSet.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.item_.Count != 0) {
-          result.item_.Add(other.item_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_rawMessageSetFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _rawMessageSetFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 11: {
-              input.ReadGroupArray(tag, field_name, result.item_, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.DefaultInstance, extensionRegistry);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item> ItemList {
-        get { return PrepareBuilder().item_; }
-      }
-      public int ItemCount {
-        get { return result.ItemCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item GetItem(int index) {
-        return result.GetItem(index);
-      }
-      public Builder SetItem(int index, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.item_[index] = value;
-        return this;
-      }
-      public Builder SetItem(int index, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.item_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddItem(global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.item_.Add(value);
-        return this;
-      }
-      public Builder AddItem(global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.item_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeItem(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item> values) {
-        PrepareBuilder();
-        result.item_.Add(values);
-        return this;
-      }
-      public Builder ClearItem() {
-        PrepareBuilder();
-        result.item_.Clear();
-        return this;
-      }
-    }
-    static RawMessageSet() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestMset.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 0 - 3876
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestNoFieldPresence.cs

@@ -1,3876 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unittest_no_field_presence.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos.Proto3 {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnittestNoFieldPresence {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_proto2_nofieldpresence_unittest_TestAllTypes__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Builder> internal__static_proto2_nofieldpresence_unittest_TestAllTypes__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_proto2_nofieldpresence_unittest_TestAllTypes_NestedMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder> internal__static_proto2_nofieldpresence_unittest_TestAllTypes_NestedMessage__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_proto2_nofieldpresence_unittest_TestProto2Required__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestProto2Required, global::Google.ProtocolBuffers.TestProtos.Proto3.TestProto2Required.Builder> internal__static_proto2_nofieldpresence_unittest_TestProto2Required__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_proto2_nofieldpresence_unittest_ForeignMessage__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.Builder> internal__static_proto2_nofieldpresence_unittest_ForeignMessage__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnittestNoFieldPresence() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "CjBnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fZmllbGRfcHJlc2VuY2Uu", 
-            "cHJvdG8SH3Byb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3QaHmdvb2ds", 
-            "ZS9wcm90b2J1Zi91bml0dGVzdC5wcm90byKaEQoMVGVzdEFsbFR5cGVzEhYK", 
-            "Dm9wdGlvbmFsX2ludDMyGAEgASgFEhYKDm9wdGlvbmFsX2ludDY0GAIgASgD", 
-            "EhcKD29wdGlvbmFsX3VpbnQzMhgDIAEoDRIXCg9vcHRpb25hbF91aW50NjQY", 
-            "BCABKAQSFwoPb3B0aW9uYWxfc2ludDMyGAUgASgREhcKD29wdGlvbmFsX3Np", 
-            "bnQ2NBgGIAEoEhIYChBvcHRpb25hbF9maXhlZDMyGAcgASgHEhgKEG9wdGlv", 
-            "bmFsX2ZpeGVkNjQYCCABKAYSGQoRb3B0aW9uYWxfc2ZpeGVkMzIYCSABKA8S", 
-            "GQoRb3B0aW9uYWxfc2ZpeGVkNjQYCiABKBASFgoOb3B0aW9uYWxfZmxvYXQY", 
-            "CyABKAISFwoPb3B0aW9uYWxfZG91YmxlGAwgASgBEhUKDW9wdGlvbmFsX2Jv", 
-            "b2wYDSABKAgSFwoPb3B0aW9uYWxfc3RyaW5nGA4gASgJEhYKDm9wdGlvbmFs", 
-            "X2J5dGVzGA8gASgMElwKF29wdGlvbmFsX25lc3RlZF9tZXNzYWdlGBIgASgL", 
-            "MjsucHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0dGVzdC5UZXN0QWxsVHlw", 
-            "ZXMuTmVzdGVkTWVzc2FnZRJRChhvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UY", 
-            "EyABKAsyLy5wcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0LkZvcmVp", 
-            "Z25NZXNzYWdlEkAKF29wdGlvbmFsX3Byb3RvMl9tZXNzYWdlGBQgASgLMh8u", 
-            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzElYKFG9wdGlvbmFsX25l", 
-            "c3RlZF9lbnVtGBUgASgOMjgucHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0", 
-            "dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkRW51bRJLChVvcHRpb25hbF9mb3Jl", 
-            "aWduX2VudW0YFiABKA4yLC5wcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0", 
-            "ZXN0LkZvcmVpZ25FbnVtEiEKFW9wdGlvbmFsX3N0cmluZ19waWVjZRgYIAEo", 
-            "CUICCAISGQoNb3B0aW9uYWxfY29yZBgZIAEoCUICCAESXgoVb3B0aW9uYWxf", 
-            "bGF6eV9tZXNzYWdlGB4gASgLMjsucHJvdG8yX25vZmllbGRwcmVzZW5jZV91", 
-            "bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZUICKAESFgoOcmVw", 
-            "ZWF0ZWRfaW50MzIYHyADKAUSFgoOcmVwZWF0ZWRfaW50NjQYICADKAMSFwoP", 
-            "cmVwZWF0ZWRfdWludDMyGCEgAygNEhcKD3JlcGVhdGVkX3VpbnQ2NBgiIAMo", 
-            "BBIXCg9yZXBlYXRlZF9zaW50MzIYIyADKBESFwoPcmVwZWF0ZWRfc2ludDY0", 
-            "GCQgAygSEhgKEHJlcGVhdGVkX2ZpeGVkMzIYJSADKAcSGAoQcmVwZWF0ZWRf", 
-            "Zml4ZWQ2NBgmIAMoBhIZChFyZXBlYXRlZF9zZml4ZWQzMhgnIAMoDxIZChFy", 
-            "ZXBlYXRlZF9zZml4ZWQ2NBgoIAMoEBIWCg5yZXBlYXRlZF9mbG9hdBgpIAMo", 
-            "AhIXCg9yZXBlYXRlZF9kb3VibGUYKiADKAESFQoNcmVwZWF0ZWRfYm9vbBgr", 
-            "IAMoCBIXCg9yZXBlYXRlZF9zdHJpbmcYLCADKAkSFgoOcmVwZWF0ZWRfYnl0", 
-            "ZXMYLSADKAwSXAoXcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2UYMCADKAsyOy5w", 
-            "cm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5O", 
-            "ZXN0ZWRNZXNzYWdlElEKGHJlcGVhdGVkX2ZvcmVpZ25fbWVzc2FnZRgxIAMo", 
-            "CzIvLnByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3QuRm9yZWlnbk1l", 
-            "c3NhZ2USQAoXcmVwZWF0ZWRfcHJvdG8yX21lc3NhZ2UYMiADKAsyHy5wcm90", 
-            "b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMSVgoUcmVwZWF0ZWRfbmVzdGVk", 
-            "X2VudW0YMyADKA4yOC5wcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0ZXN0", 
-            "LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtEksKFXJlcGVhdGVkX2ZvcmVpZ25f", 
-            "ZW51bRg0IAMoDjIsLnByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3Qu", 
-            "Rm9yZWlnbkVudW0SIQoVcmVwZWF0ZWRfc3RyaW5nX3BpZWNlGDYgAygJQgII", 
-            "AhIZCg1yZXBlYXRlZF9jb3JkGDcgAygJQgIIARJeChVyZXBlYXRlZF9sYXp5", 
-            "X21lc3NhZ2UYOSADKAsyOy5wcm90bzJfbm9maWVsZHByZXNlbmNlX3VuaXR0", 
-            "ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlQgIoARIWCgxvbmVvZl91", 
-            "aW50MzIYbyABKA1IABJbChRvbmVvZl9uZXN0ZWRfbWVzc2FnZRhwIAEoCzI7", 
-            "LnByb3RvMl9ub2ZpZWxkcHJlc2VuY2VfdW5pdHRlc3QuVGVzdEFsbFR5cGVz", 
-            "Lk5lc3RlZE1lc3NhZ2VIABIWCgxvbmVvZl9zdHJpbmcYcSABKAlIABJOCgpv", 
-            "bmVvZl9lbnVtGHIgASgOMjgucHJvdG8yX25vZmllbGRwcmVzZW5jZV91bml0", 
-            "dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkRW51bUgAGhsKDU5lc3RlZE1lc3Nh", 
-            "Z2USCgoCYmIYASABKAUiJwoKTmVzdGVkRW51bRIHCgNGT08QABIHCgNCQVIQ", 
-            "ARIHCgNCQVoQAkINCgtvbmVvZl9maWVsZCJFChJUZXN0UHJvdG8yUmVxdWly", 
-            "ZWQSLwoGcHJvdG8yGAEgASgLMh8ucHJvdG9idWZfdW5pdHRlc3QuVGVzdFJl", 
-            "cXVpcmVkIhsKDkZvcmVpZ25NZXNzYWdlEgkKAWMYASABKAUqQAoLRm9yZWln", 
-            "bkVudW0SDwoLRk9SRUlHTl9GT08QABIPCgtGT1JFSUdOX0JBUhABEg8KC0ZP", 
-            "UkVJR05fQkFaEAJCK6oCKEdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVzdFBy", 
-          "b3Rvcy5Qcm90bzNiBnByb3RvMw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_proto2_nofieldpresence_unittest_TestAllTypes__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_proto2_nofieldpresence_unittest_TestAllTypes__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Builder>(internal__static_proto2_nofieldpresence_unittest_TestAllTypes__Descriptor,
-                new string[] { "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalNestedMessage", "OptionalForeignMessage", "OptionalProto2Message", "OptionalNestedEnum", "OptionalForeignEnum", "OptionalStringPiece", "OptionalCord", "OptionalLazyMessage", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedProto2Message", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedStringPiece", "RepeatedCord", "RepeatedLazyMessage", "OneofUint32", "OneofNestedMessage", "OneofString", "OneofEnum", "OneofField", });
-        internal__static_proto2_nofieldpresence_unittest_TestAllTypes_NestedMessage__Descriptor = internal__static_proto2_nofieldpresence_unittest_TestAllTypes__Descriptor.NestedTypes[0];
-        internal__static_proto2_nofieldpresence_unittest_TestAllTypes_NestedMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder>(internal__static_proto2_nofieldpresence_unittest_TestAllTypes_NestedMessage__Descriptor,
-                new string[] { "Bb", });
-        internal__static_proto2_nofieldpresence_unittest_TestProto2Required__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_proto2_nofieldpresence_unittest_TestProto2Required__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestProto2Required, global::Google.ProtocolBuffers.TestProtos.Proto3.TestProto2Required.Builder>(internal__static_proto2_nofieldpresence_unittest_TestProto2Required__Descriptor,
-                new string[] { "Proto2", });
-        internal__static_proto2_nofieldpresence_unittest_ForeignMessage__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_proto2_nofieldpresence_unittest_ForeignMessage__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.Builder>(internal__static_proto2_nofieldpresence_unittest_ForeignMessage__Descriptor,
-                new string[] { "C", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, 
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Enums
-  public enum ForeignEnum {
-    FOREIGN_FOO = 0,
-    FOREIGN_BAR = 1,
-    FOREIGN_BAZ = 2,
-  }
-
-  #endregion
-
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestAllTypes : pb::GeneratedMessage<TestAllTypes, TestAllTypes.Builder> {
-    private TestAllTypes() { }
-    private static readonly TestAllTypes defaultInstance = new TestAllTypes().MakeReadOnly();
-    private static readonly string[] _testAllTypesFieldNames = new string[] { "oneof_enum", "oneof_nested_message", "oneof_string", "oneof_uint32", "optional_bool", "optional_bytes", "optional_cord", "optional_double", "optional_fixed32", "optional_fixed64", "optional_float", "optional_foreign_enum", "optional_foreign_message", "optional_int32", "optional_int64", "optional_lazy_message", "optional_nested_enum", "optional_nested_message", "optional_proto2_message", "optional_sfixed32", "optional_sfixed64", "optional_sint32", "optional_sint64", "optional_string", "optional_string_piece", "optional_uint32", "optional_uint64", "repeated_bool", "repeated_bytes", "repeated_cord", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_int32", "repeated_int64", "repeated_lazy_message", "repeated_nested_enum", "repeated_nested_message", "repeated_proto2_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_string_piece", "repeated_uint32", "repeated_uint64" };
-    private static readonly uint[] _testAllTypesFieldTags = new uint[] { 912, 898, 906, 888, 104, 122, 202, 97, 61, 65, 93, 176, 154, 8, 16, 242, 168, 146, 162, 77, 81, 40, 48, 114, 194, 24, 32, 344, 362, 442, 337, 301, 305, 333, 416, 394, 248, 256, 458, 408, 386, 402, 317, 321, 280, 288, 354, 434, 264, 272 };
-    public static TestAllTypes DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestAllTypes DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestAllTypes ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.internal__static_proto2_nofieldpresence_unittest_TestAllTypes__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestAllTypes, TestAllTypes.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.internal__static_proto2_nofieldpresence_unittest_TestAllTypes__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum NestedEnum {
-        FOO = 0,
-        BAR = 1,
-        BAZ = 2,
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {
-        private NestedMessage() { }
-        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();
-        private static readonly string[] _nestedMessageFieldNames = new string[] { "bb" };
-        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8 };
-        public static NestedMessage DefaultInstance {
-          get { return defaultInstance; }
-        }
-
-        public override NestedMessage DefaultInstanceForType {
-          get { return DefaultInstance; }
-        }
-
-        protected override NestedMessage ThisMessage {
-          get { return this; }
-        }
-
-        public static pbd::MessageDescriptor Descriptor {
-          get { return global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.internal__static_proto2_nofieldpresence_unittest_TestAllTypes_NestedMessage__Descriptor; }
-        }
-
-        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {
-          get { return global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.internal__static_proto2_nofieldpresence_unittest_TestAllTypes_NestedMessage__FieldAccessorTable; }
-        }
-
-        public const int BbFieldNumber = 1;
-        private int bb_;
-        public int Bb {
-          get { return bb_; }
-        }
-
-        public override void WriteTo(pb::ICodedOutputStream output) {
-          CalcSerializedSize();
-          string[] field_names = _nestedMessageFieldNames;
-          if (Bb != 0) {
-            output.WriteInt32(1, field_names[0], Bb);
-          }
-          UnknownFields.WriteTo(output);
-        }
-
-        private int memoizedSerializedSize = -1;
-        public override int SerializedSize {
-          get {
-            int size = memoizedSerializedSize;
-            if (size != -1) return size;
-            return CalcSerializedSize();
-          }
-        }
-
-        private int CalcSerializedSize() {
-          int size = memoizedSerializedSize;
-          if (size != -1) return size;
-
-          size = 0;
-          if (Bb != 0) {
-            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
-          }
-          size += UnknownFields.SerializedSize;
-          memoizedSerializedSize = size;
-          return size;
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data) {
-          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-        }
-        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {
-          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-        }
-        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-        }
-        private NestedMessage MakeReadOnly() {
-          return this;
-        }
-
-        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(NestedMessage prototype) {
-          return new Builder(prototype);
-        }
-
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {
-          protected override Builder ThisBuilder {
-            get { return this; }
-          }
-          public Builder() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-          }
-          internal Builder(NestedMessage cloneFrom) {
-            result = cloneFrom;
-            resultIsReadOnly = true;
-          }
-
-          private bool resultIsReadOnly;
-          private NestedMessage result;
-
-          private NestedMessage PrepareBuilder() {
-            if (resultIsReadOnly) {
-              NestedMessage original = result;
-              result = new NestedMessage();
-              resultIsReadOnly = false;
-              MergeFrom(original);
-            }
-            return result;
-          }
-
-          public override bool IsInitialized {
-            get { return result.IsInitialized; }
-          }
-
-          protected override NestedMessage MessageBeingBuilt {
-            get { return PrepareBuilder(); }
-          }
-
-          public override Builder Clear() {
-            result = DefaultInstance;
-            resultIsReadOnly = true;
-            return this;
-          }
-
-          public override Builder Clone() {
-            if (resultIsReadOnly) {
-              return new Builder(result);
-            } else {
-              return new Builder().MergeFrom(result);
-            }
-          }
-
-          public override pbd::MessageDescriptor DescriptorForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Descriptor; }
-          }
-
-          public override NestedMessage DefaultInstanceForType {
-            get { return global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-          }
-
-          public override NestedMessage BuildPartial() {
-            if (resultIsReadOnly) {
-              return result;
-            }
-            resultIsReadOnly = true;
-            return result.MakeReadOnly();
-          }
-
-          public override Builder MergeFrom(pb::IMessage other) {
-            if (other is NestedMessage) {
-              return MergeFrom((NestedMessage) other);
-            } else {
-              base.MergeFrom(other);
-              return this;
-            }
-          }
-
-          public override Builder MergeFrom(NestedMessage other) {
-            if (other == global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance) return this;
-            PrepareBuilder();
-            if (other.Bb != 0) {
-              Bb = other.Bb;
-            }
-            this.MergeUnknownFields(other.UnknownFields);
-            return this;
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input) {
-            return MergeFrom(input, pb::ExtensionRegistry.Empty);
-          }
-
-          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-            PrepareBuilder();
-            pb::UnknownFieldSet.Builder unknownFields = null;
-            uint tag;
-            string field_name;
-            while (input.ReadTag(out tag, out field_name)) {
-              if(tag == 0 && field_name != null) {
-                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-                if(field_ordinal >= 0)
-                  tag = _nestedMessageFieldTags[field_ordinal];
-                else {
-                  if (unknownFields == null) {
-                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                  }
-                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-                  continue;
-                }
-              }
-              switch (tag) {
-                case 0: {
-                  throw pb::InvalidProtocolBufferException.InvalidTag();
-                }
-                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, field_name);
-                  break;
-                }
-                case 8: {
-                  input.ReadInt32(ref result.bb_);
-                  break;
-                }
-              }
-            }
-
-            if (unknownFields != null) {
-              this.UnknownFields = unknownFields.Build();
-            }
-            return this;
-          }
-
-
-          public int Bb {
-            get { return result.Bb; }
-            set { SetBb(value); }
-          }
-          public Builder SetBb(int value) {
-            PrepareBuilder();
-            result.bb_ = value;
-            return this;
-          }
-          public Builder ClearBb() {
-            PrepareBuilder();
-            result.bb_ = 0;
-            return this;
-          }
-        }
-        static NestedMessage() {
-          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.Descriptor, null);
-        }
-      }
-
-    }
-    #endregion
-
-    private object oneofField_;
-    public enum OneofFieldOneofCase {
-      OneofUint32 = 111,
-      OneofNestedMessage = 112,
-      OneofString = 113,
-      OneofEnum = 114,
-      None = 0,
-    }
-    private OneofFieldOneofCase oneofFieldCase_ = OneofFieldOneofCase.None;
-    public OneofFieldOneofCase OneofFieldCase {
-      get { return oneofFieldCase_; }
-    }
-
-    public const int OptionalInt32FieldNumber = 1;
-    private int optionalInt32_;
-    public int OptionalInt32 {
-      get { return optionalInt32_; }
-    }
-
-    public const int OptionalInt64FieldNumber = 2;
-    private long optionalInt64_;
-    public long OptionalInt64 {
-      get { return optionalInt64_; }
-    }
-
-    public const int OptionalUint32FieldNumber = 3;
-    private uint optionalUint32_;
-    public uint OptionalUint32 {
-      get { return optionalUint32_; }
-    }
-
-    public const int OptionalUint64FieldNumber = 4;
-    private ulong optionalUint64_;
-    public ulong OptionalUint64 {
-      get { return optionalUint64_; }
-    }
-
-    public const int OptionalSint32FieldNumber = 5;
-    private int optionalSint32_;
-    public int OptionalSint32 {
-      get { return optionalSint32_; }
-    }
-
-    public const int OptionalSint64FieldNumber = 6;
-    private long optionalSint64_;
-    public long OptionalSint64 {
-      get { return optionalSint64_; }
-    }
-
-    public const int OptionalFixed32FieldNumber = 7;
-    private uint optionalFixed32_;
-    public uint OptionalFixed32 {
-      get { return optionalFixed32_; }
-    }
-
-    public const int OptionalFixed64FieldNumber = 8;
-    private ulong optionalFixed64_;
-    public ulong OptionalFixed64 {
-      get { return optionalFixed64_; }
-    }
-
-    public const int OptionalSfixed32FieldNumber = 9;
-    private int optionalSfixed32_;
-    public int OptionalSfixed32 {
-      get { return optionalSfixed32_; }
-    }
-
-    public const int OptionalSfixed64FieldNumber = 10;
-    private long optionalSfixed64_;
-    public long OptionalSfixed64 {
-      get { return optionalSfixed64_; }
-    }
-
-    public const int OptionalFloatFieldNumber = 11;
-    private float optionalFloat_;
-    public float OptionalFloat {
-      get { return optionalFloat_; }
-    }
-
-    public const int OptionalDoubleFieldNumber = 12;
-    private double optionalDouble_;
-    public double OptionalDouble {
-      get { return optionalDouble_; }
-    }
-
-    public const int OptionalBoolFieldNumber = 13;
-    private bool optionalBool_;
-    public bool OptionalBool {
-      get { return optionalBool_; }
-    }
-
-    public const int OptionalStringFieldNumber = 14;
-    private string optionalString_ = "";
-    public string OptionalString {
-      get { return optionalString_; }
-    }
-
-    public const int OptionalBytesFieldNumber = 15;
-    private pb::ByteString optionalBytes_ = pb::ByteString.Empty;
-    public pb::ByteString OptionalBytes {
-      get { return optionalBytes_; }
-    }
-
-    public const int OptionalNestedMessageFieldNumber = 18;
-    private bool hasOptionalNestedMessage;
-    private global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage optionalNestedMessage_;
-    public bool HasOptionalNestedMessage {
-      get { return hasOptionalNestedMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage OptionalNestedMessage {
-      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public const int OptionalForeignMessageFieldNumber = 19;
-    private bool hasOptionalForeignMessage;
-    private global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage optionalForeignMessage_;
-    public bool HasOptionalForeignMessage {
-      get { return hasOptionalForeignMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage OptionalForeignMessage {
-      get { return optionalForeignMessage_ ?? global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.DefaultInstance; }
-    }
-
-    public const int OptionalProto2MessageFieldNumber = 20;
-    private bool hasOptionalProto2Message;
-    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes optionalProto2Message_;
-    public bool HasOptionalProto2Message {
-      get { return hasOptionalProto2Message; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes OptionalProto2Message {
-      get { return optionalProto2Message_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }
-    }
-
-    public const int OptionalNestedEnumFieldNumber = 21;
-    private global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum.FOO;
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum OptionalNestedEnum {
-      get { return optionalNestedEnum_; }
-    }
-
-    public const int OptionalForeignEnumFieldNumber = 22;
-    private global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum.FOREIGN_FOO;
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum OptionalForeignEnum {
-      get { return optionalForeignEnum_; }
-    }
-
-    public const int OptionalStringPieceFieldNumber = 24;
-    private string optionalStringPiece_ = "";
-    public string OptionalStringPiece {
-      get { return optionalStringPiece_; }
-    }
-
-    public const int OptionalCordFieldNumber = 25;
-    private string optionalCord_ = "";
-    public string OptionalCord {
-      get { return optionalCord_; }
-    }
-
-    public const int OptionalLazyMessageFieldNumber = 30;
-    private bool hasOptionalLazyMessage;
-    private global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage optionalLazyMessage_;
-    public bool HasOptionalLazyMessage {
-      get { return hasOptionalLazyMessage; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage OptionalLazyMessage {
-      get { return optionalLazyMessage_ ?? global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public const int RepeatedInt32FieldNumber = 31;
-    private int repeatedInt32MemoizedSerializedSize;
-    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> RepeatedInt32List {
-      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }
-    }
-    public int RepeatedInt32Count {
-      get { return repeatedInt32_.Count; }
-    }
-    public int GetRepeatedInt32(int index) {
-      return repeatedInt32_[index];
-    }
-
-    public const int RepeatedInt64FieldNumber = 32;
-    private int repeatedInt64MemoizedSerializedSize;
-    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> RepeatedInt64List {
-      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }
-    }
-    public int RepeatedInt64Count {
-      get { return repeatedInt64_.Count; }
-    }
-    public long GetRepeatedInt64(int index) {
-      return repeatedInt64_[index];
-    }
-
-    public const int RepeatedUint32FieldNumber = 33;
-    private int repeatedUint32MemoizedSerializedSize;
-    private pbc::PopsicleList<uint> repeatedUint32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> RepeatedUint32List {
-      get { return pbc::Lists.AsReadOnly(repeatedUint32_); }
-    }
-    public int RepeatedUint32Count {
-      get { return repeatedUint32_.Count; }
-    }
-    public uint GetRepeatedUint32(int index) {
-      return repeatedUint32_[index];
-    }
-
-    public const int RepeatedUint64FieldNumber = 34;
-    private int repeatedUint64MemoizedSerializedSize;
-    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> RepeatedUint64List {
-      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }
-    }
-    public int RepeatedUint64Count {
-      get { return repeatedUint64_.Count; }
-    }
-    public ulong GetRepeatedUint64(int index) {
-      return repeatedUint64_[index];
-    }
-
-    public const int RepeatedSint32FieldNumber = 35;
-    private int repeatedSint32MemoizedSerializedSize;
-    private pbc::PopsicleList<int> repeatedSint32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> RepeatedSint32List {
-      get { return pbc::Lists.AsReadOnly(repeatedSint32_); }
-    }
-    public int RepeatedSint32Count {
-      get { return repeatedSint32_.Count; }
-    }
-    public int GetRepeatedSint32(int index) {
-      return repeatedSint32_[index];
-    }
-
-    public const int RepeatedSint64FieldNumber = 36;
-    private int repeatedSint64MemoizedSerializedSize;
-    private pbc::PopsicleList<long> repeatedSint64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> RepeatedSint64List {
-      get { return pbc::Lists.AsReadOnly(repeatedSint64_); }
-    }
-    public int RepeatedSint64Count {
-      get { return repeatedSint64_.Count; }
-    }
-    public long GetRepeatedSint64(int index) {
-      return repeatedSint64_[index];
-    }
-
-    public const int RepeatedFixed32FieldNumber = 37;
-    private int repeatedFixed32MemoizedSerializedSize;
-    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();
-    public scg::IList<uint> RepeatedFixed32List {
-      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }
-    }
-    public int RepeatedFixed32Count {
-      get { return repeatedFixed32_.Count; }
-    }
-    public uint GetRepeatedFixed32(int index) {
-      return repeatedFixed32_[index];
-    }
-
-    public const int RepeatedFixed64FieldNumber = 38;
-    private int repeatedFixed64MemoizedSerializedSize;
-    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();
-    public scg::IList<ulong> RepeatedFixed64List {
-      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }
-    }
-    public int RepeatedFixed64Count {
-      get { return repeatedFixed64_.Count; }
-    }
-    public ulong GetRepeatedFixed64(int index) {
-      return repeatedFixed64_[index];
-    }
-
-    public const int RepeatedSfixed32FieldNumber = 39;
-    private int repeatedSfixed32MemoizedSerializedSize;
-    private pbc::PopsicleList<int> repeatedSfixed32_ = new pbc::PopsicleList<int>();
-    public scg::IList<int> RepeatedSfixed32List {
-      get { return pbc::Lists.AsReadOnly(repeatedSfixed32_); }
-    }
-    public int RepeatedSfixed32Count {
-      get { return repeatedSfixed32_.Count; }
-    }
-    public int GetRepeatedSfixed32(int index) {
-      return repeatedSfixed32_[index];
-    }
-
-    public const int RepeatedSfixed64FieldNumber = 40;
-    private int repeatedSfixed64MemoizedSerializedSize;
-    private pbc::PopsicleList<long> repeatedSfixed64_ = new pbc::PopsicleList<long>();
-    public scg::IList<long> RepeatedSfixed64List {
-      get { return pbc::Lists.AsReadOnly(repeatedSfixed64_); }
-    }
-    public int RepeatedSfixed64Count {
-      get { return repeatedSfixed64_.Count; }
-    }
-    public long GetRepeatedSfixed64(int index) {
-      return repeatedSfixed64_[index];
-    }
-
-    public const int RepeatedFloatFieldNumber = 41;
-    private int repeatedFloatMemoizedSerializedSize;
-    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();
-    public scg::IList<float> RepeatedFloatList {
-      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }
-    }
-    public int RepeatedFloatCount {
-      get { return repeatedFloat_.Count; }
-    }
-    public float GetRepeatedFloat(int index) {
-      return repeatedFloat_[index];
-    }
-
-    public const int RepeatedDoubleFieldNumber = 42;
-    private int repeatedDoubleMemoizedSerializedSize;
-    private pbc::PopsicleList<double> repeatedDouble_ = new pbc::PopsicleList<double>();
-    public scg::IList<double> RepeatedDoubleList {
-      get { return pbc::Lists.AsReadOnly(repeatedDouble_); }
-    }
-    public int RepeatedDoubleCount {
-      get { return repeatedDouble_.Count; }
-    }
-    public double GetRepeatedDouble(int index) {
-      return repeatedDouble_[index];
-    }
-
-    public const int RepeatedBoolFieldNumber = 43;
-    private int repeatedBoolMemoizedSerializedSize;
-    private pbc::PopsicleList<bool> repeatedBool_ = new pbc::PopsicleList<bool>();
-    public scg::IList<bool> RepeatedBoolList {
-      get { return pbc::Lists.AsReadOnly(repeatedBool_); }
-    }
-    public int RepeatedBoolCount {
-      get { return repeatedBool_.Count; }
-    }
-    public bool GetRepeatedBool(int index) {
-      return repeatedBool_[index];
-    }
-
-    public const int RepeatedStringFieldNumber = 44;
-    private pbc::PopsicleList<string> repeatedString_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedStringList {
-      get { return pbc::Lists.AsReadOnly(repeatedString_); }
-    }
-    public int RepeatedStringCount {
-      get { return repeatedString_.Count; }
-    }
-    public string GetRepeatedString(int index) {
-      return repeatedString_[index];
-    }
-
-    public const int RepeatedBytesFieldNumber = 45;
-    private pbc::PopsicleList<pb::ByteString> repeatedBytes_ = new pbc::PopsicleList<pb::ByteString>();
-    public scg::IList<pb::ByteString> RepeatedBytesList {
-      get { return pbc::Lists.AsReadOnly(repeatedBytes_); }
-    }
-    public int RepeatedBytesCount {
-      get { return repeatedBytes_.Count; }
-    }
-    public pb::ByteString GetRepeatedBytes(int index) {
-      return repeatedBytes_[index];
-    }
-
-    public const int RepeatedNestedMessageFieldNumber = 48;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage> repeatedNestedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {
-      get { return repeatedNestedMessage_; }
-    }
-    public int RepeatedNestedMessageCount {
-      get { return repeatedNestedMessage_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {
-      return repeatedNestedMessage_[index];
-    }
-
-    public const int RepeatedForeignMessageFieldNumber = 49;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage> repeatedForeignMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage> RepeatedForeignMessageList {
-      get { return repeatedForeignMessage_; }
-    }
-    public int RepeatedForeignMessageCount {
-      get { return repeatedForeignMessage_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage GetRepeatedForeignMessage(int index) {
-      return repeatedForeignMessage_[index];
-    }
-
-    public const int RepeatedProto2MessageFieldNumber = 50;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> repeatedProto2Message_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> RepeatedProto2MessageList {
-      get { return repeatedProto2Message_; }
-    }
-    public int RepeatedProto2MessageCount {
-      get { return repeatedProto2Message_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetRepeatedProto2Message(int index) {
-      return repeatedProto2Message_[index];
-    }
-
-    public const int RepeatedNestedEnumFieldNumber = 51;
-    private int repeatedNestedEnumMemoizedSerializedSize;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum> repeatedNestedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {
-      get { return pbc::Lists.AsReadOnly(repeatedNestedEnum_); }
-    }
-    public int RepeatedNestedEnumCount {
-      get { return repeatedNestedEnum_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {
-      return repeatedNestedEnum_[index];
-    }
-
-    public const int RepeatedForeignEnumFieldNumber = 52;
-    private int repeatedForeignEnumMemoizedSerializedSize;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum> repeatedForeignEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum> RepeatedForeignEnumList {
-      get { return pbc::Lists.AsReadOnly(repeatedForeignEnum_); }
-    }
-    public int RepeatedForeignEnumCount {
-      get { return repeatedForeignEnum_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum GetRepeatedForeignEnum(int index) {
-      return repeatedForeignEnum_[index];
-    }
-
-    public const int RepeatedStringPieceFieldNumber = 54;
-    private pbc::PopsicleList<string> repeatedStringPiece_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedStringPieceList {
-      get { return pbc::Lists.AsReadOnly(repeatedStringPiece_); }
-    }
-    public int RepeatedStringPieceCount {
-      get { return repeatedStringPiece_.Count; }
-    }
-    public string GetRepeatedStringPiece(int index) {
-      return repeatedStringPiece_[index];
-    }
-
-    public const int RepeatedCordFieldNumber = 55;
-    private pbc::PopsicleList<string> repeatedCord_ = new pbc::PopsicleList<string>();
-    public scg::IList<string> RepeatedCordList {
-      get { return pbc::Lists.AsReadOnly(repeatedCord_); }
-    }
-    public int RepeatedCordCount {
-      get { return repeatedCord_.Count; }
-    }
-    public string GetRepeatedCord(int index) {
-      return repeatedCord_[index];
-    }
-
-    public const int RepeatedLazyMessageFieldNumber = 57;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage> repeatedLazyMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage> RepeatedLazyMessageList {
-      get { return repeatedLazyMessage_; }
-    }
-    public int RepeatedLazyMessageCount {
-      get { return repeatedLazyMessage_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage GetRepeatedLazyMessage(int index) {
-      return repeatedLazyMessage_[index];
-    }
-
-    public const int OneofUint32FieldNumber = 111;
-    public uint OneofUint32 {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofUint32 ? (uint) oneofField_ : 0; }
-    }
-
-    public const int OneofNestedMessageFieldNumber = 112;
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage OneofNestedMessage {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage ? (global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage) oneofField_ : global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-    }
-
-    public const int OneofStringFieldNumber = 113;
-    public string OneofString {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofString ? (string) oneofField_ : ""; }
-    }
-
-    public const int OneofEnumFieldNumber = 114;
-    public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum OneofEnum {
-      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofEnum ? (global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum) oneofField_ : global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum.FOO; }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testAllTypesFieldNames;
-      if (OptionalInt32 != 0) {
-        output.WriteInt32(1, field_names[13], OptionalInt32);
-      }
-      if (OptionalInt64 != 0L) {
-        output.WriteInt64(2, field_names[14], OptionalInt64);
-      }
-      if (OptionalUint32 != 0) {
-        output.WriteUInt32(3, field_names[25], OptionalUint32);
-      }
-      if (OptionalUint64 != 0UL) {
-        output.WriteUInt64(4, field_names[26], OptionalUint64);
-      }
-      if (OptionalSint32 != 0) {
-        output.WriteSInt32(5, field_names[21], OptionalSint32);
-      }
-      if (OptionalSint64 != 0L) {
-        output.WriteSInt64(6, field_names[22], OptionalSint64);
-      }
-      if (OptionalFixed32 != 0) {
-        output.WriteFixed32(7, field_names[8], OptionalFixed32);
-      }
-      if (OptionalFixed64 != 0UL) {
-        output.WriteFixed64(8, field_names[9], OptionalFixed64);
-      }
-      if (OptionalSfixed32 != 0) {
-        output.WriteSFixed32(9, field_names[19], OptionalSfixed32);
-      }
-      if (OptionalSfixed64 != 0L) {
-        output.WriteSFixed64(10, field_names[20], OptionalSfixed64);
-      }
-      if (OptionalFloat != 0F) {
-        output.WriteFloat(11, field_names[10], OptionalFloat);
-      }
-      if (OptionalDouble != 0D) {
-        output.WriteDouble(12, field_names[7], OptionalDouble);
-      }
-      if (OptionalBool != false) {
-        output.WriteBool(13, field_names[4], OptionalBool);
-      }
-      if (OptionalString != "") {
-        output.WriteString(14, field_names[23], OptionalString);
-      }
-      if (OptionalBytes != pb::ByteString.Empty) {
-        output.WriteBytes(15, field_names[5], OptionalBytes);
-      }
-      if (hasOptionalNestedMessage) {
-        output.WriteMessage(18, field_names[17], OptionalNestedMessage);
-      }
-      if (hasOptionalForeignMessage) {
-        output.WriteMessage(19, field_names[12], OptionalForeignMessage);
-      }
-      if (hasOptionalProto2Message) {
-        output.WriteMessage(20, field_names[18], OptionalProto2Message);
-      }
-      if (OptionalNestedEnum != global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum.FOO) {
-        output.WriteEnum(21, field_names[16], (int) OptionalNestedEnum, OptionalNestedEnum);
-      }
-      if (OptionalForeignEnum != global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum.FOREIGN_FOO) {
-        output.WriteEnum(22, field_names[11], (int) OptionalForeignEnum, OptionalForeignEnum);
-      }
-      if (OptionalStringPiece != "") {
-        output.WriteString(24, field_names[24], OptionalStringPiece);
-      }
-      if (OptionalCord != "") {
-        output.WriteString(25, field_names[6], OptionalCord);
-      }
-      if (hasOptionalLazyMessage) {
-        output.WriteMessage(30, field_names[15], OptionalLazyMessage);
-      }
-      if (repeatedInt32_.Count > 0) {
-        output.WritePackedInt32Array(31, field_names[36], repeatedInt32MemoizedSerializedSize, repeatedInt32_);
-      }
-      if (repeatedInt64_.Count > 0) {
-        output.WritePackedInt64Array(32, field_names[37], repeatedInt64MemoizedSerializedSize, repeatedInt64_);
-      }
-      if (repeatedUint32_.Count > 0) {
-        output.WritePackedUInt32Array(33, field_names[48], repeatedUint32MemoizedSerializedSize, repeatedUint32_);
-      }
-      if (repeatedUint64_.Count > 0) {
-        output.WritePackedUInt64Array(34, field_names[49], repeatedUint64MemoizedSerializedSize, repeatedUint64_);
-      }
-      if (repeatedSint32_.Count > 0) {
-        output.WritePackedSInt32Array(35, field_names[44], repeatedSint32MemoizedSerializedSize, repeatedSint32_);
-      }
-      if (repeatedSint64_.Count > 0) {
-        output.WritePackedSInt64Array(36, field_names[45], repeatedSint64MemoizedSerializedSize, repeatedSint64_);
-      }
-      if (repeatedFixed32_.Count > 0) {
-        output.WritePackedFixed32Array(37, field_names[31], repeatedFixed32MemoizedSerializedSize, repeatedFixed32_);
-      }
-      if (repeatedFixed64_.Count > 0) {
-        output.WritePackedFixed64Array(38, field_names[32], repeatedFixed64MemoizedSerializedSize, repeatedFixed64_);
-      }
-      if (repeatedSfixed32_.Count > 0) {
-        output.WritePackedSFixed32Array(39, field_names[42], repeatedSfixed32MemoizedSerializedSize, repeatedSfixed32_);
-      }
-      if (repeatedSfixed64_.Count > 0) {
-        output.WritePackedSFixed64Array(40, field_names[43], repeatedSfixed64MemoizedSerializedSize, repeatedSfixed64_);
-      }
-      if (repeatedFloat_.Count > 0) {
-        output.WritePackedFloatArray(41, field_names[33], repeatedFloatMemoizedSerializedSize, repeatedFloat_);
-      }
-      if (repeatedDouble_.Count > 0) {
-        output.WritePackedDoubleArray(42, field_names[30], repeatedDoubleMemoizedSerializedSize, repeatedDouble_);
-      }
-      if (repeatedBool_.Count > 0) {
-        output.WritePackedBoolArray(43, field_names[27], repeatedBoolMemoizedSerializedSize, repeatedBool_);
-      }
-      if (repeatedString_.Count > 0) {
-        output.WriteStringArray(44, field_names[46], repeatedString_);
-      }
-      if (repeatedBytes_.Count > 0) {
-        output.WriteBytesArray(45, field_names[28], repeatedBytes_);
-      }
-      if (repeatedNestedMessage_.Count > 0) {
-        output.WriteMessageArray(48, field_names[40], repeatedNestedMessage_);
-      }
-      if (repeatedForeignMessage_.Count > 0) {
-        output.WriteMessageArray(49, field_names[35], repeatedForeignMessage_);
-      }
-      if (repeatedProto2Message_.Count > 0) {
-        output.WriteMessageArray(50, field_names[41], repeatedProto2Message_);
-      }
-      if (repeatedNestedEnum_.Count > 0) {
-        output.WritePackedEnumArray(51, field_names[39], repeatedNestedEnumMemoizedSerializedSize, repeatedNestedEnum_);
-      }
-      if (repeatedForeignEnum_.Count > 0) {
-        output.WritePackedEnumArray(52, field_names[34], repeatedForeignEnumMemoizedSerializedSize, repeatedForeignEnum_);
-      }
-      if (repeatedStringPiece_.Count > 0) {
-        output.WriteStringArray(54, field_names[47], repeatedStringPiece_);
-      }
-      if (repeatedCord_.Count > 0) {
-        output.WriteStringArray(55, field_names[29], repeatedCord_);
-      }
-      if (repeatedLazyMessage_.Count > 0) {
-        output.WriteMessageArray(57, field_names[38], repeatedLazyMessage_);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
-        output.WriteUInt32(111, field_names[3], OneofUint32);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
-        output.WriteMessage(112, field_names[1], OneofNestedMessage);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
-        output.WriteString(113, field_names[2], OneofString);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofEnum) {
-        output.WriteEnum(114, field_names[0], (int) OneofEnum, OneofEnum);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (OptionalInt32 != 0) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, OptionalInt32);
-      }
-      if (OptionalInt64 != 0L) {
-        size += pb::CodedOutputStream.ComputeInt64Size(2, OptionalInt64);
-      }
-      if (OptionalUint32 != 0) {
-        size += pb::CodedOutputStream.ComputeUInt32Size(3, OptionalUint32);
-      }
-      if (OptionalUint64 != 0UL) {
-        size += pb::CodedOutputStream.ComputeUInt64Size(4, OptionalUint64);
-      }
-      if (OptionalSint32 != 0) {
-        size += pb::CodedOutputStream.ComputeSInt32Size(5, OptionalSint32);
-      }
-      if (OptionalSint64 != 0L) {
-        size += pb::CodedOutputStream.ComputeSInt64Size(6, OptionalSint64);
-      }
-      if (OptionalFixed32 != 0) {
-        size += pb::CodedOutputStream.ComputeFixed32Size(7, OptionalFixed32);
-      }
-      if (OptionalFixed64 != 0UL) {
-        size += pb::CodedOutputStream.ComputeFixed64Size(8, OptionalFixed64);
-      }
-      if (OptionalSfixed32 != 0) {
-        size += pb::CodedOutputStream.ComputeSFixed32Size(9, OptionalSfixed32);
-      }
-      if (OptionalSfixed64 != 0L) {
-        size += pb::CodedOutputStream.ComputeSFixed64Size(10, OptionalSfixed64);
-      }
-      if (OptionalFloat != 0F) {
-        size += pb::CodedOutputStream.ComputeFloatSize(11, OptionalFloat);
-      }
-      if (OptionalDouble != 0D) {
-        size += pb::CodedOutputStream.ComputeDoubleSize(12, OptionalDouble);
-      }
-      if (OptionalBool != false) {
-        size += pb::CodedOutputStream.ComputeBoolSize(13, OptionalBool);
-      }
-      if (OptionalString != "") {
-        size += pb::CodedOutputStream.ComputeStringSize(14, OptionalString);
-      }
-      if (OptionalBytes != pb::ByteString.Empty) {
-        size += pb::CodedOutputStream.ComputeBytesSize(15, OptionalBytes);
-      }
-      if (hasOptionalNestedMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(18, OptionalNestedMessage);
-      }
-      if (hasOptionalForeignMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(19, OptionalForeignMessage);
-      }
-      if (hasOptionalProto2Message) {
-        size += pb::CodedOutputStream.ComputeMessageSize(20, OptionalProto2Message);
-      }
-      if (OptionalNestedEnum != global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum.FOO) {
-        size += pb::CodedOutputStream.ComputeEnumSize(21, (int) OptionalNestedEnum);
-      }
-      if (OptionalForeignEnum != global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum.FOREIGN_FOO) {
-        size += pb::CodedOutputStream.ComputeEnumSize(22, (int) OptionalForeignEnum);
-      }
-      if (OptionalStringPiece != "") {
-        size += pb::CodedOutputStream.ComputeStringSize(24, OptionalStringPiece);
-      }
-      if (OptionalCord != "") {
-        size += pb::CodedOutputStream.ComputeStringSize(25, OptionalCord);
-      }
-      if (hasOptionalLazyMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(30, OptionalLazyMessage);
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in RepeatedInt32List) {
-          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        if (repeatedInt32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedInt32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in RepeatedInt64List) {
-          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        if (repeatedInt64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedInt64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (uint element in RepeatedUint32List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        if (repeatedUint32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedUint32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (ulong element in RepeatedUint64List) {
-          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        if (repeatedUint64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedUint64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (int element in RepeatedSint32List) {
-          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
-        }
-        size += dataSize;
-        if (repeatedSint32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedSint32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (long element in RepeatedSint64List) {
-          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
-        }
-        size += dataSize;
-        if (repeatedSint64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedSint64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * repeatedFixed32_.Count;
-        size += dataSize;
-        if (repeatedFixed32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedFixed32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * repeatedFixed64_.Count;
-        size += dataSize;
-        if (repeatedFixed64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedFixed64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * repeatedSfixed32_.Count;
-        size += dataSize;
-        if (repeatedSfixed32_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedSfixed32MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * repeatedSfixed64_.Count;
-        size += dataSize;
-        if (repeatedSfixed64_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedSfixed64MemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 4 * repeatedFloat_.Count;
-        size += dataSize;
-        if (repeatedFloat_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedFloatMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 8 * repeatedDouble_.Count;
-        size += dataSize;
-        if (repeatedDouble_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedDoubleMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        dataSize = 1 * repeatedBool_.Count;
-        size += dataSize;
-        if (repeatedBool_.Count != 0) {
-          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
-        }
-        repeatedBoolMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedStringList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedString_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (pb::ByteString element in RepeatedBytesList) {
-          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedBytes_.Count;
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage element in RepeatedNestedMessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(48, element);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage element in RepeatedForeignMessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(49, element);
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes element in RepeatedProto2MessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(50, element);
-      }
-      {
-        int dataSize = 0;
-        if (repeatedNestedEnum_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum element in repeatedNestedEnum_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 2;
-          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
-        }
-        repeatedNestedEnumMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        if (repeatedForeignEnum_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum element in repeatedForeignEnum_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 2;
-          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
-        }
-        repeatedForeignEnumMemoizedSerializedSize = dataSize;
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedStringPieceList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedStringPiece_.Count;
-      }
-      {
-        int dataSize = 0;
-        foreach (string element in RepeatedCordList) {
-          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
-        }
-        size += dataSize;
-        size += 2 * repeatedCord_.Count;
-      }
-      foreach (global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage element in RepeatedLazyMessageList) {
-        size += pb::CodedOutputStream.ComputeMessageSize(57, element);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
-        size += pb::CodedOutputStream.ComputeUInt32Size(111, OneofUint32);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
-        size += pb::CodedOutputStream.ComputeMessageSize(112, OneofNestedMessage);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
-        size += pb::CodedOutputStream.ComputeStringSize(113, OneofString);
-      }
-      if (oneofFieldCase_ == OneofFieldOneofCase.OneofEnum) {
-        size += pb::CodedOutputStream.ComputeEnumSize(114, (int) OneofEnum);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestAllTypes ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestAllTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestAllTypes MakeReadOnly() {
-      repeatedInt32_.MakeReadOnly();
-      repeatedInt64_.MakeReadOnly();
-      repeatedUint32_.MakeReadOnly();
-      repeatedUint64_.MakeReadOnly();
-      repeatedSint32_.MakeReadOnly();
-      repeatedSint64_.MakeReadOnly();
-      repeatedFixed32_.MakeReadOnly();
-      repeatedFixed64_.MakeReadOnly();
-      repeatedSfixed32_.MakeReadOnly();
-      repeatedSfixed64_.MakeReadOnly();
-      repeatedFloat_.MakeReadOnly();
-      repeatedDouble_.MakeReadOnly();
-      repeatedBool_.MakeReadOnly();
-      repeatedString_.MakeReadOnly();
-      repeatedBytes_.MakeReadOnly();
-      repeatedNestedMessage_.MakeReadOnly();
-      repeatedForeignMessage_.MakeReadOnly();
-      repeatedProto2Message_.MakeReadOnly();
-      repeatedNestedEnum_.MakeReadOnly();
-      repeatedForeignEnum_.MakeReadOnly();
-      repeatedStringPiece_.MakeReadOnly();
-      repeatedCord_.MakeReadOnly();
-      repeatedLazyMessage_.MakeReadOnly();
-      return this;
-    }
-
-    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(TestAllTypes prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestAllTypes, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestAllTypes cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestAllTypes result;
-
-      private TestAllTypes PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestAllTypes original = result;
-          result = new TestAllTypes();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestAllTypes MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Descriptor; }
-      }
-
-      public override TestAllTypes DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.DefaultInstance; }
-      }
-
-      public override TestAllTypes BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestAllTypes) {
-          return MergeFrom((TestAllTypes) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestAllTypes other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.OptionalInt32 != 0) {
-          OptionalInt32 = other.OptionalInt32;
-        }
-        if (other.OptionalInt64 != 0L) {
-          OptionalInt64 = other.OptionalInt64;
-        }
-        if (other.OptionalUint32 != 0) {
-          OptionalUint32 = other.OptionalUint32;
-        }
-        if (other.OptionalUint64 != 0UL) {
-          OptionalUint64 = other.OptionalUint64;
-        }
-        if (other.OptionalSint32 != 0) {
-          OptionalSint32 = other.OptionalSint32;
-        }
-        if (other.OptionalSint64 != 0L) {
-          OptionalSint64 = other.OptionalSint64;
-        }
-        if (other.OptionalFixed32 != 0) {
-          OptionalFixed32 = other.OptionalFixed32;
-        }
-        if (other.OptionalFixed64 != 0UL) {
-          OptionalFixed64 = other.OptionalFixed64;
-        }
-        if (other.OptionalSfixed32 != 0) {
-          OptionalSfixed32 = other.OptionalSfixed32;
-        }
-        if (other.OptionalSfixed64 != 0L) {
-          OptionalSfixed64 = other.OptionalSfixed64;
-        }
-        if (other.OptionalFloat != 0F) {
-          OptionalFloat = other.OptionalFloat;
-        }
-        if (other.OptionalDouble != 0D) {
-          OptionalDouble = other.OptionalDouble;
-        }
-        if (other.OptionalBool != false) {
-          OptionalBool = other.OptionalBool;
-        }
-        if (other.OptionalString != "") {
-          OptionalString = other.OptionalString;
-        }
-        if (other.OptionalBytes != pb::ByteString.Empty) {
-          OptionalBytes = other.OptionalBytes;
-        }
-        if (other.HasOptionalNestedMessage) {
-          MergeOptionalNestedMessage(other.OptionalNestedMessage);
-        }
-        if (other.HasOptionalForeignMessage) {
-          MergeOptionalForeignMessage(other.OptionalForeignMessage);
-        }
-        if (other.HasOptionalProto2Message) {
-          MergeOptionalProto2Message(other.OptionalProto2Message);
-        }
-        if (other.OptionalNestedEnum != global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum.FOO) {
-          OptionalNestedEnum = other.OptionalNestedEnum;
-        }
-        if (other.OptionalForeignEnum != global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum.FOREIGN_FOO) {
-          OptionalForeignEnum = other.OptionalForeignEnum;
-        }
-        if (other.OptionalStringPiece != "") {
-          OptionalStringPiece = other.OptionalStringPiece;
-        }
-        if (other.OptionalCord != "") {
-          OptionalCord = other.OptionalCord;
-        }
-        if (other.HasOptionalLazyMessage) {
-          MergeOptionalLazyMessage(other.OptionalLazyMessage);
-        }
-        if (other.repeatedInt32_.Count != 0) {
-          result.repeatedInt32_.Add(other.repeatedInt32_);
-        }
-        if (other.repeatedInt64_.Count != 0) {
-          result.repeatedInt64_.Add(other.repeatedInt64_);
-        }
-        if (other.repeatedUint32_.Count != 0) {
-          result.repeatedUint32_.Add(other.repeatedUint32_);
-        }
-        if (other.repeatedUint64_.Count != 0) {
-          result.repeatedUint64_.Add(other.repeatedUint64_);
-        }
-        if (other.repeatedSint32_.Count != 0) {
-          result.repeatedSint32_.Add(other.repeatedSint32_);
-        }
-        if (other.repeatedSint64_.Count != 0) {
-          result.repeatedSint64_.Add(other.repeatedSint64_);
-        }
-        if (other.repeatedFixed32_.Count != 0) {
-          result.repeatedFixed32_.Add(other.repeatedFixed32_);
-        }
-        if (other.repeatedFixed64_.Count != 0) {
-          result.repeatedFixed64_.Add(other.repeatedFixed64_);
-        }
-        if (other.repeatedSfixed32_.Count != 0) {
-          result.repeatedSfixed32_.Add(other.repeatedSfixed32_);
-        }
-        if (other.repeatedSfixed64_.Count != 0) {
-          result.repeatedSfixed64_.Add(other.repeatedSfixed64_);
-        }
-        if (other.repeatedFloat_.Count != 0) {
-          result.repeatedFloat_.Add(other.repeatedFloat_);
-        }
-        if (other.repeatedDouble_.Count != 0) {
-          result.repeatedDouble_.Add(other.repeatedDouble_);
-        }
-        if (other.repeatedBool_.Count != 0) {
-          result.repeatedBool_.Add(other.repeatedBool_);
-        }
-        if (other.repeatedString_.Count != 0) {
-          result.repeatedString_.Add(other.repeatedString_);
-        }
-        if (other.repeatedBytes_.Count != 0) {
-          result.repeatedBytes_.Add(other.repeatedBytes_);
-        }
-        if (other.repeatedNestedMessage_.Count != 0) {
-          result.repeatedNestedMessage_.Add(other.repeatedNestedMessage_);
-        }
-        if (other.repeatedForeignMessage_.Count != 0) {
-          result.repeatedForeignMessage_.Add(other.repeatedForeignMessage_);
-        }
-        if (other.repeatedProto2Message_.Count != 0) {
-          result.repeatedProto2Message_.Add(other.repeatedProto2Message_);
-        }
-        if (other.repeatedNestedEnum_.Count != 0) {
-          result.repeatedNestedEnum_.Add(other.repeatedNestedEnum_);
-        }
-        if (other.repeatedForeignEnum_.Count != 0) {
-          result.repeatedForeignEnum_.Add(other.repeatedForeignEnum_);
-        }
-        if (other.repeatedStringPiece_.Count != 0) {
-          result.repeatedStringPiece_.Add(other.repeatedStringPiece_);
-        }
-        if (other.repeatedCord_.Count != 0) {
-          result.repeatedCord_.Add(other.repeatedCord_);
-        }
-        if (other.repeatedLazyMessage_.Count != 0) {
-          result.repeatedLazyMessage_.Add(other.repeatedLazyMessage_);
-        }
-        switch (other.OneofFieldCase) {
-          case OneofFieldOneofCase.OneofUint32: {
-            SetOneofUint32(other.OneofUint32);
-            break;
-          }
-          case OneofFieldOneofCase.OneofNestedMessage: {
-            MergeOneofNestedMessage(other.OneofNestedMessage);
-            break;
-          }
-          case OneofFieldOneofCase.OneofString: {
-            SetOneofString(other.OneofString);
-            break;
-          }
-          case OneofFieldOneofCase.OneofEnum: {
-            SetOneofEnum(other.OneofEnum);
-            break;
-          }
-          case OneofFieldOneofCase.None: { break; }
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testAllTypesFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testAllTypesFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              input.ReadInt32(ref result.optionalInt32_);
-              break;
-            }
-            case 16: {
-              input.ReadInt64(ref result.optionalInt64_);
-              break;
-            }
-            case 24: {
-              input.ReadUInt32(ref result.optionalUint32_);
-              break;
-            }
-            case 32: {
-              input.ReadUInt64(ref result.optionalUint64_);
-              break;
-            }
-            case 40: {
-              input.ReadSInt32(ref result.optionalSint32_);
-              break;
-            }
-            case 48: {
-              input.ReadSInt64(ref result.optionalSint64_);
-              break;
-            }
-            case 61: {
-              input.ReadFixed32(ref result.optionalFixed32_);
-              break;
-            }
-            case 65: {
-              input.ReadFixed64(ref result.optionalFixed64_);
-              break;
-            }
-            case 77: {
-              input.ReadSFixed32(ref result.optionalSfixed32_);
-              break;
-            }
-            case 81: {
-              input.ReadSFixed64(ref result.optionalSfixed64_);
-              break;
-            }
-            case 93: {
-              input.ReadFloat(ref result.optionalFloat_);
-              break;
-            }
-            case 97: {
-              input.ReadDouble(ref result.optionalDouble_);
-              break;
-            }
-            case 104: {
-              input.ReadBool(ref result.optionalBool_);
-              break;
-            }
-            case 114: {
-              input.ReadString(ref result.optionalString_);
-              break;
-            }
-            case 122: {
-              input.ReadBytes(ref result.optionalBytes_);
-              break;
-            }
-            case 146: {
-              global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.CreateBuilder();
-              if (result.hasOptionalNestedMessage) {
-                subBuilder.MergeFrom(OptionalNestedMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalNestedMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 154: {
-              global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.CreateBuilder();
-              if (result.hasOptionalForeignMessage) {
-                subBuilder.MergeFrom(OptionalForeignMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalForeignMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 162: {
-              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();
-              if (result.hasOptionalProto2Message) {
-                subBuilder.MergeFrom(OptionalProto2Message);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalProto2Message = subBuilder.BuildPartial();
-              break;
-            }
-            case 168: {
-              object unknown;
-              if(input.ReadEnum(ref result.optionalNestedEnum_, out unknown)) {
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(21, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 176: {
-              object unknown;
-              if(input.ReadEnum(ref result.optionalForeignEnum_, out unknown)) {
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(22, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 194: {
-              input.ReadString(ref result.optionalStringPiece_);
-              break;
-            }
-            case 202: {
-              input.ReadString(ref result.optionalCord_);
-              break;
-            }
-            case 242: {
-              global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.CreateBuilder();
-              if (result.hasOptionalLazyMessage) {
-                subBuilder.MergeFrom(OptionalLazyMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              OptionalLazyMessage = subBuilder.BuildPartial();
-              break;
-            }
-            case 250:
-            case 248: {
-              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);
-              break;
-            }
-            case 258:
-            case 256: {
-              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);
-              break;
-            }
-            case 266:
-            case 264: {
-              input.ReadUInt32Array(tag, field_name, result.repeatedUint32_);
-              break;
-            }
-            case 274:
-            case 272: {
-              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);
-              break;
-            }
-            case 282:
-            case 280: {
-              input.ReadSInt32Array(tag, field_name, result.repeatedSint32_);
-              break;
-            }
-            case 290:
-            case 288: {
-              input.ReadSInt64Array(tag, field_name, result.repeatedSint64_);
-              break;
-            }
-            case 298:
-            case 301: {
-              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);
-              break;
-            }
-            case 306:
-            case 305: {
-              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);
-              break;
-            }
-            case 314:
-            case 317: {
-              input.ReadSFixed32Array(tag, field_name, result.repeatedSfixed32_);
-              break;
-            }
-            case 322:
-            case 321: {
-              input.ReadSFixed64Array(tag, field_name, result.repeatedSfixed64_);
-              break;
-            }
-            case 330:
-            case 333: {
-              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);
-              break;
-            }
-            case 338:
-            case 337: {
-              input.ReadDoubleArray(tag, field_name, result.repeatedDouble_);
-              break;
-            }
-            case 346:
-            case 344: {
-              input.ReadBoolArray(tag, field_name, result.repeatedBool_);
-              break;
-            }
-            case 354: {
-              input.ReadStringArray(tag, field_name, result.repeatedString_);
-              break;
-            }
-            case 362: {
-              input.ReadBytesArray(tag, field_name, result.repeatedBytes_);
-              break;
-            }
-            case 386: {
-              input.ReadMessageArray(tag, field_name, result.repeatedNestedMessage_, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 394: {
-              input.ReadMessageArray(tag, field_name, result.repeatedForeignMessage_, global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 402: {
-              input.ReadMessageArray(tag, field_name, result.repeatedProto2Message_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 410:
-            case 408: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum>(tag, field_name, result.repeatedNestedEnum_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(51, (ulong)(int)rawValue);
-              }
-              break;
-            }
-            case 418:
-            case 416: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum>(tag, field_name, result.repeatedForeignEnum_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(52, (ulong)(int)rawValue);
-              }
-              break;
-            }
-            case 434: {
-              input.ReadStringArray(tag, field_name, result.repeatedStringPiece_);
-              break;
-            }
-            case 442: {
-              input.ReadStringArray(tag, field_name, result.repeatedCord_);
-              break;
-            }
-            case 458: {
-              input.ReadMessageArray(tag, field_name, result.repeatedLazyMessage_, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance, extensionRegistry);
-              break;
-            }
-            case 888: {
-              uint value = 0;
-              if (input.ReadUInt32(ref value)) {
-                result.oneofField_ = value;
-                result.oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
-              }
-              break;
-            }
-            case 898: {
-              global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.CreateBuilder();
-              if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
-                subBuilder.MergeFrom(OneofNestedMessage);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              result.oneofField_ = subBuilder.BuildPartial();
-              result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
-              break;
-            }
-            case 906: {
-              string value = "";
-              if (input.ReadString(ref value)) {
-                result.oneofField_ = value;
-                result.oneofFieldCase_ = OneofFieldOneofCase.OneofString;
-              }
-              break;
-            }
-            case 912: {
-              object unknown;
-              global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum enumValue = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum.FOO;
-              if(input.ReadEnum(ref enumValue, out unknown)) {
-                result.oneofField_ = enumValue;
-                result.oneofFieldCase_ = OneofFieldOneofCase.OneofEnum;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(114, (ulong)(int)unknown);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public int OptionalInt32 {
-        get { return result.OptionalInt32; }
-        set { SetOptionalInt32(value); }
-      }
-      public Builder SetOptionalInt32(int value) {
-        PrepareBuilder();
-        result.optionalInt32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalInt32() {
-        PrepareBuilder();
-        result.optionalInt32_ = 0;
-        return this;
-      }
-
-      public long OptionalInt64 {
-        get { return result.OptionalInt64; }
-        set { SetOptionalInt64(value); }
-      }
-      public Builder SetOptionalInt64(long value) {
-        PrepareBuilder();
-        result.optionalInt64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalInt64() {
-        PrepareBuilder();
-        result.optionalInt64_ = 0L;
-        return this;
-      }
-
-      public uint OptionalUint32 {
-        get { return result.OptionalUint32; }
-        set { SetOptionalUint32(value); }
-      }
-      public Builder SetOptionalUint32(uint value) {
-        PrepareBuilder();
-        result.optionalUint32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalUint32() {
-        PrepareBuilder();
-        result.optionalUint32_ = 0;
-        return this;
-      }
-
-      public ulong OptionalUint64 {
-        get { return result.OptionalUint64; }
-        set { SetOptionalUint64(value); }
-      }
-      public Builder SetOptionalUint64(ulong value) {
-        PrepareBuilder();
-        result.optionalUint64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalUint64() {
-        PrepareBuilder();
-        result.optionalUint64_ = 0UL;
-        return this;
-      }
-
-      public int OptionalSint32 {
-        get { return result.OptionalSint32; }
-        set { SetOptionalSint32(value); }
-      }
-      public Builder SetOptionalSint32(int value) {
-        PrepareBuilder();
-        result.optionalSint32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalSint32() {
-        PrepareBuilder();
-        result.optionalSint32_ = 0;
-        return this;
-      }
-
-      public long OptionalSint64 {
-        get { return result.OptionalSint64; }
-        set { SetOptionalSint64(value); }
-      }
-      public Builder SetOptionalSint64(long value) {
-        PrepareBuilder();
-        result.optionalSint64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalSint64() {
-        PrepareBuilder();
-        result.optionalSint64_ = 0L;
-        return this;
-      }
-
-      public uint OptionalFixed32 {
-        get { return result.OptionalFixed32; }
-        set { SetOptionalFixed32(value); }
-      }
-      public Builder SetOptionalFixed32(uint value) {
-        PrepareBuilder();
-        result.optionalFixed32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalFixed32() {
-        PrepareBuilder();
-        result.optionalFixed32_ = 0;
-        return this;
-      }
-
-      public ulong OptionalFixed64 {
-        get { return result.OptionalFixed64; }
-        set { SetOptionalFixed64(value); }
-      }
-      public Builder SetOptionalFixed64(ulong value) {
-        PrepareBuilder();
-        result.optionalFixed64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalFixed64() {
-        PrepareBuilder();
-        result.optionalFixed64_ = 0UL;
-        return this;
-      }
-
-      public int OptionalSfixed32 {
-        get { return result.OptionalSfixed32; }
-        set { SetOptionalSfixed32(value); }
-      }
-      public Builder SetOptionalSfixed32(int value) {
-        PrepareBuilder();
-        result.optionalSfixed32_ = value;
-        return this;
-      }
-      public Builder ClearOptionalSfixed32() {
-        PrepareBuilder();
-        result.optionalSfixed32_ = 0;
-        return this;
-      }
-
-      public long OptionalSfixed64 {
-        get { return result.OptionalSfixed64; }
-        set { SetOptionalSfixed64(value); }
-      }
-      public Builder SetOptionalSfixed64(long value) {
-        PrepareBuilder();
-        result.optionalSfixed64_ = value;
-        return this;
-      }
-      public Builder ClearOptionalSfixed64() {
-        PrepareBuilder();
-        result.optionalSfixed64_ = 0L;
-        return this;
-      }
-
-      public float OptionalFloat {
-        get { return result.OptionalFloat; }
-        set { SetOptionalFloat(value); }
-      }
-      public Builder SetOptionalFloat(float value) {
-        PrepareBuilder();
-        result.optionalFloat_ = value;
-        return this;
-      }
-      public Builder ClearOptionalFloat() {
-        PrepareBuilder();
-        result.optionalFloat_ = 0F;
-        return this;
-      }
-
-      public double OptionalDouble {
-        get { return result.OptionalDouble; }
-        set { SetOptionalDouble(value); }
-      }
-      public Builder SetOptionalDouble(double value) {
-        PrepareBuilder();
-        result.optionalDouble_ = value;
-        return this;
-      }
-      public Builder ClearOptionalDouble() {
-        PrepareBuilder();
-        result.optionalDouble_ = 0D;
-        return this;
-      }
-
-      public bool OptionalBool {
-        get { return result.OptionalBool; }
-        set { SetOptionalBool(value); }
-      }
-      public Builder SetOptionalBool(bool value) {
-        PrepareBuilder();
-        result.optionalBool_ = value;
-        return this;
-      }
-      public Builder ClearOptionalBool() {
-        PrepareBuilder();
-        result.optionalBool_ = false;
-        return this;
-      }
-
-      public string OptionalString {
-        get { return result.OptionalString; }
-        set { SetOptionalString(value); }
-      }
-      public Builder SetOptionalString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.optionalString_ = value;
-        return this;
-      }
-      public Builder ClearOptionalString() {
-        PrepareBuilder();
-        result.optionalString_ = "";
-        return this;
-      }
-
-      public pb::ByteString OptionalBytes {
-        get { return result.OptionalBytes; }
-        set { SetOptionalBytes(value); }
-      }
-      public Builder SetOptionalBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.optionalBytes_ = value;
-        return this;
-      }
-      public Builder ClearOptionalBytes() {
-        PrepareBuilder();
-        result.optionalBytes_ = pb::ByteString.Empty;
-        return this;
-      }
-
-      public bool HasOptionalNestedMessage {
-       get { return result.hasOptionalNestedMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage OptionalNestedMessage {
-        get { return result.OptionalNestedMessage; }
-        set { SetOptionalNestedMessage(value); }
-      }
-      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = true;
-        result.optionalNestedMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = true;
-        result.optionalNestedMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalNestedMessage &&
-            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance) {
-            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalNestedMessage_ = value;
-        }
-        result.hasOptionalNestedMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalNestedMessage() {
-        PrepareBuilder();
-        result.hasOptionalNestedMessage = false;
-        result.optionalNestedMessage_ = null;
-        return this;
-      }
-
-      public bool HasOptionalForeignMessage {
-       get { return result.hasOptionalForeignMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage OptionalForeignMessage {
-        get { return result.OptionalForeignMessage; }
-        set { SetOptionalForeignMessage(value); }
-      }
-      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalForeignMessage = true;
-        result.optionalForeignMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalForeignMessage = true;
-        result.optionalForeignMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalForeignMessage &&
-            result.optionalForeignMessage_ != global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.DefaultInstance) {
-            result.optionalForeignMessage_ = global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.CreateBuilder(result.optionalForeignMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalForeignMessage_ = value;
-        }
-        result.hasOptionalForeignMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalForeignMessage() {
-        PrepareBuilder();
-        result.hasOptionalForeignMessage = false;
-        result.optionalForeignMessage_ = null;
-        return this;
-      }
-
-      public bool HasOptionalProto2Message {
-       get { return result.hasOptionalProto2Message; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes OptionalProto2Message {
-        get { return result.OptionalProto2Message; }
-        set { SetOptionalProto2Message(value); }
-      }
-      public Builder SetOptionalProto2Message(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalProto2Message = true;
-        result.optionalProto2Message_ = value;
-        return this;
-      }
-      public Builder SetOptionalProto2Message(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalProto2Message = true;
-        result.optionalProto2Message_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalProto2Message(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalProto2Message &&
-            result.optionalProto2Message_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {
-            result.optionalProto2Message_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.optionalProto2Message_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalProto2Message_ = value;
-        }
-        result.hasOptionalProto2Message = true;
-        return this;
-      }
-      public Builder ClearOptionalProto2Message() {
-        PrepareBuilder();
-        result.hasOptionalProto2Message = false;
-        result.optionalProto2Message_ = null;
-        return this;
-      }
-
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum OptionalNestedEnum {
-        get { return result.OptionalNestedEnum; }
-        set { SetOptionalNestedEnum(value); }
-      }
-      public Builder SetOptionalNestedEnum(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.optionalNestedEnum_ = value;
-        return this;
-      }
-      public Builder ClearOptionalNestedEnum() {
-        PrepareBuilder();
-        result.optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum.FOO;
-        return this;
-      }
-
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum OptionalForeignEnum {
-        get { return result.OptionalForeignEnum; }
-        set { SetOptionalForeignEnum(value); }
-      }
-      public Builder SetOptionalForeignEnum(global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum value) {
-        PrepareBuilder();
-        result.optionalForeignEnum_ = value;
-        return this;
-      }
-      public Builder ClearOptionalForeignEnum() {
-        PrepareBuilder();
-        result.optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum.FOREIGN_FOO;
-        return this;
-      }
-
-      public string OptionalStringPiece {
-        get { return result.OptionalStringPiece; }
-        set { SetOptionalStringPiece(value); }
-      }
-      public Builder SetOptionalStringPiece(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.optionalStringPiece_ = value;
-        return this;
-      }
-      public Builder ClearOptionalStringPiece() {
-        PrepareBuilder();
-        result.optionalStringPiece_ = "";
-        return this;
-      }
-
-      public string OptionalCord {
-        get { return result.OptionalCord; }
-        set { SetOptionalCord(value); }
-      }
-      public Builder SetOptionalCord(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.optionalCord_ = value;
-        return this;
-      }
-      public Builder ClearOptionalCord() {
-        PrepareBuilder();
-        result.optionalCord_ = "";
-        return this;
-      }
-
-      public bool HasOptionalLazyMessage {
-       get { return result.hasOptionalLazyMessage; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage OptionalLazyMessage {
-        get { return result.OptionalLazyMessage; }
-        set { SetOptionalLazyMessage(value); }
-      }
-      public Builder SetOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasOptionalLazyMessage = true;
-        result.optionalLazyMessage_ = value;
-        return this;
-      }
-      public Builder SetOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasOptionalLazyMessage = true;
-        result.optionalLazyMessage_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOptionalLazyMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasOptionalLazyMessage &&
-            result.optionalLazyMessage_ != global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance) {
-            result.optionalLazyMessage_ = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.CreateBuilder(result.optionalLazyMessage_).MergeFrom(value).BuildPartial();
-        } else {
-          result.optionalLazyMessage_ = value;
-        }
-        result.hasOptionalLazyMessage = true;
-        return this;
-      }
-      public Builder ClearOptionalLazyMessage() {
-        PrepareBuilder();
-        result.hasOptionalLazyMessage = false;
-        result.optionalLazyMessage_ = null;
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> RepeatedInt32List {
-        get { return PrepareBuilder().repeatedInt32_; }
-      }
-      public int RepeatedInt32Count {
-        get { return result.RepeatedInt32Count; }
-      }
-      public int GetRepeatedInt32(int index) {
-        return result.GetRepeatedInt32(index);
-      }
-      public Builder SetRepeatedInt32(int index, int value) {
-        PrepareBuilder();
-        result.repeatedInt32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedInt32(int value) {
-        PrepareBuilder();
-        result.repeatedInt32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.repeatedInt32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedInt32() {
-        PrepareBuilder();
-        result.repeatedInt32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> RepeatedInt64List {
-        get { return PrepareBuilder().repeatedInt64_; }
-      }
-      public int RepeatedInt64Count {
-        get { return result.RepeatedInt64Count; }
-      }
-      public long GetRepeatedInt64(int index) {
-        return result.GetRepeatedInt64(index);
-      }
-      public Builder SetRepeatedInt64(int index, long value) {
-        PrepareBuilder();
-        result.repeatedInt64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedInt64(long value) {
-        PrepareBuilder();
-        result.repeatedInt64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.repeatedInt64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedInt64() {
-        PrepareBuilder();
-        result.repeatedInt64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<uint> RepeatedUint32List {
-        get { return PrepareBuilder().repeatedUint32_; }
-      }
-      public int RepeatedUint32Count {
-        get { return result.RepeatedUint32Count; }
-      }
-      public uint GetRepeatedUint32(int index) {
-        return result.GetRepeatedUint32(index);
-      }
-      public Builder SetRepeatedUint32(int index, uint value) {
-        PrepareBuilder();
-        result.repeatedUint32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedUint32(uint value) {
-        PrepareBuilder();
-        result.repeatedUint32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedUint32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.repeatedUint32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedUint32() {
-        PrepareBuilder();
-        result.repeatedUint32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> RepeatedUint64List {
-        get { return PrepareBuilder().repeatedUint64_; }
-      }
-      public int RepeatedUint64Count {
-        get { return result.RepeatedUint64Count; }
-      }
-      public ulong GetRepeatedUint64(int index) {
-        return result.GetRepeatedUint64(index);
-      }
-      public Builder SetRepeatedUint64(int index, ulong value) {
-        PrepareBuilder();
-        result.repeatedUint64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedUint64(ulong value) {
-        PrepareBuilder();
-        result.repeatedUint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.repeatedUint64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedUint64() {
-        PrepareBuilder();
-        result.repeatedUint64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> RepeatedSint32List {
-        get { return PrepareBuilder().repeatedSint32_; }
-      }
-      public int RepeatedSint32Count {
-        get { return result.RepeatedSint32Count; }
-      }
-      public int GetRepeatedSint32(int index) {
-        return result.GetRepeatedSint32(index);
-      }
-      public Builder SetRepeatedSint32(int index, int value) {
-        PrepareBuilder();
-        result.repeatedSint32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedSint32(int value) {
-        PrepareBuilder();
-        result.repeatedSint32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedSint32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.repeatedSint32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedSint32() {
-        PrepareBuilder();
-        result.repeatedSint32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> RepeatedSint64List {
-        get { return PrepareBuilder().repeatedSint64_; }
-      }
-      public int RepeatedSint64Count {
-        get { return result.RepeatedSint64Count; }
-      }
-      public long GetRepeatedSint64(int index) {
-        return result.GetRepeatedSint64(index);
-      }
-      public Builder SetRepeatedSint64(int index, long value) {
-        PrepareBuilder();
-        result.repeatedSint64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedSint64(long value) {
-        PrepareBuilder();
-        result.repeatedSint64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedSint64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.repeatedSint64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedSint64() {
-        PrepareBuilder();
-        result.repeatedSint64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<uint> RepeatedFixed32List {
-        get { return PrepareBuilder().repeatedFixed32_; }
-      }
-      public int RepeatedFixed32Count {
-        get { return result.RepeatedFixed32Count; }
-      }
-      public uint GetRepeatedFixed32(int index) {
-        return result.GetRepeatedFixed32(index);
-      }
-      public Builder SetRepeatedFixed32(int index, uint value) {
-        PrepareBuilder();
-        result.repeatedFixed32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFixed32(uint value) {
-        PrepareBuilder();
-        result.repeatedFixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {
-        PrepareBuilder();
-        result.repeatedFixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFixed32() {
-        PrepareBuilder();
-        result.repeatedFixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<ulong> RepeatedFixed64List {
-        get { return PrepareBuilder().repeatedFixed64_; }
-      }
-      public int RepeatedFixed64Count {
-        get { return result.RepeatedFixed64Count; }
-      }
-      public ulong GetRepeatedFixed64(int index) {
-        return result.GetRepeatedFixed64(index);
-      }
-      public Builder SetRepeatedFixed64(int index, ulong value) {
-        PrepareBuilder();
-        result.repeatedFixed64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFixed64(ulong value) {
-        PrepareBuilder();
-        result.repeatedFixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {
-        PrepareBuilder();
-        result.repeatedFixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFixed64() {
-        PrepareBuilder();
-        result.repeatedFixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<int> RepeatedSfixed32List {
-        get { return PrepareBuilder().repeatedSfixed32_; }
-      }
-      public int RepeatedSfixed32Count {
-        get { return result.RepeatedSfixed32Count; }
-      }
-      public int GetRepeatedSfixed32(int index) {
-        return result.GetRepeatedSfixed32(index);
-      }
-      public Builder SetRepeatedSfixed32(int index, int value) {
-        PrepareBuilder();
-        result.repeatedSfixed32_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedSfixed32(int value) {
-        PrepareBuilder();
-        result.repeatedSfixed32_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedSfixed32(scg::IEnumerable<int> values) {
-        PrepareBuilder();
-        result.repeatedSfixed32_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedSfixed32() {
-        PrepareBuilder();
-        result.repeatedSfixed32_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<long> RepeatedSfixed64List {
-        get { return PrepareBuilder().repeatedSfixed64_; }
-      }
-      public int RepeatedSfixed64Count {
-        get { return result.RepeatedSfixed64Count; }
-      }
-      public long GetRepeatedSfixed64(int index) {
-        return result.GetRepeatedSfixed64(index);
-      }
-      public Builder SetRepeatedSfixed64(int index, long value) {
-        PrepareBuilder();
-        result.repeatedSfixed64_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedSfixed64(long value) {
-        PrepareBuilder();
-        result.repeatedSfixed64_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedSfixed64(scg::IEnumerable<long> values) {
-        PrepareBuilder();
-        result.repeatedSfixed64_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedSfixed64() {
-        PrepareBuilder();
-        result.repeatedSfixed64_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<float> RepeatedFloatList {
-        get { return PrepareBuilder().repeatedFloat_; }
-      }
-      public int RepeatedFloatCount {
-        get { return result.RepeatedFloatCount; }
-      }
-      public float GetRepeatedFloat(int index) {
-        return result.GetRepeatedFloat(index);
-      }
-      public Builder SetRepeatedFloat(int index, float value) {
-        PrepareBuilder();
-        result.repeatedFloat_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedFloat(float value) {
-        PrepareBuilder();
-        result.repeatedFloat_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {
-        PrepareBuilder();
-        result.repeatedFloat_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedFloat() {
-        PrepareBuilder();
-        result.repeatedFloat_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<double> RepeatedDoubleList {
-        get { return PrepareBuilder().repeatedDouble_; }
-      }
-      public int RepeatedDoubleCount {
-        get { return result.RepeatedDoubleCount; }
-      }
-      public double GetRepeatedDouble(int index) {
-        return result.GetRepeatedDouble(index);
-      }
-      public Builder SetRepeatedDouble(int index, double value) {
-        PrepareBuilder();
-        result.repeatedDouble_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedDouble(double value) {
-        PrepareBuilder();
-        result.repeatedDouble_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedDouble(scg::IEnumerable<double> values) {
-        PrepareBuilder();
-        result.repeatedDouble_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedDouble() {
-        PrepareBuilder();
-        result.repeatedDouble_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<bool> RepeatedBoolList {
-        get { return PrepareBuilder().repeatedBool_; }
-      }
-      public int RepeatedBoolCount {
-        get { return result.RepeatedBoolCount; }
-      }
-      public bool GetRepeatedBool(int index) {
-        return result.GetRepeatedBool(index);
-      }
-      public Builder SetRepeatedBool(int index, bool value) {
-        PrepareBuilder();
-        result.repeatedBool_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedBool(bool value) {
-        PrepareBuilder();
-        result.repeatedBool_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedBool(scg::IEnumerable<bool> values) {
-        PrepareBuilder();
-        result.repeatedBool_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedBool() {
-        PrepareBuilder();
-        result.repeatedBool_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedStringList {
-        get { return PrepareBuilder().repeatedString_; }
-      }
-      public int RepeatedStringCount {
-        get { return result.RepeatedStringCount; }
-      }
-      public string GetRepeatedString(int index) {
-        return result.GetRepeatedString(index);
-      }
-      public Builder SetRepeatedString(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedString_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedString_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedString(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedString_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedString() {
-        PrepareBuilder();
-        result.repeatedString_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<pb::ByteString> RepeatedBytesList {
-        get { return PrepareBuilder().repeatedBytes_; }
-      }
-      public int RepeatedBytesCount {
-        get { return result.RepeatedBytesCount; }
-      }
-      public pb::ByteString GetRepeatedBytes(int index) {
-        return result.GetRepeatedBytes(index);
-      }
-      public Builder SetRepeatedBytes(int index, pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedBytes_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedBytes(pb::ByteString value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedBytes_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedBytes(scg::IEnumerable<pb::ByteString> values) {
-        PrepareBuilder();
-        result.repeatedBytes_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedBytes() {
-        PrepareBuilder();
-        result.repeatedBytes_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {
-        get { return PrepareBuilder().repeatedNestedMessage_; }
-      }
-      public int RepeatedNestedMessageCount {
-        get { return result.RepeatedNestedMessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {
-        return result.GetRepeatedNestedMessage(index);
-      }
-      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedNestedMessage_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedNestedMessage_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedNestedMessage_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedNestedMessage_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedNestedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage> values) {
-        PrepareBuilder();
-        result.repeatedNestedMessage_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedNestedMessage() {
-        PrepareBuilder();
-        result.repeatedNestedMessage_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage> RepeatedForeignMessageList {
-        get { return PrepareBuilder().repeatedForeignMessage_; }
-      }
-      public int RepeatedForeignMessageCount {
-        get { return result.RepeatedForeignMessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage GetRepeatedForeignMessage(int index) {
-        return result.GetRepeatedForeignMessage(index);
-      }
-      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedForeignMessage_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedForeignMessage_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedForeignMessage_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedForeignMessage_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedForeignMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage> values) {
-        PrepareBuilder();
-        result.repeatedForeignMessage_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedForeignMessage() {
-        PrepareBuilder();
-        result.repeatedForeignMessage_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> RepeatedProto2MessageList {
-        get { return PrepareBuilder().repeatedProto2Message_; }
-      }
-      public int RepeatedProto2MessageCount {
-        get { return result.RepeatedProto2MessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes GetRepeatedProto2Message(int index) {
-        return result.GetRepeatedProto2Message(index);
-      }
-      public Builder SetRepeatedProto2Message(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedProto2Message_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedProto2Message(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedProto2Message_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedProto2Message(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedProto2Message_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedProto2Message(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedProto2Message_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedProto2Message(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes> values) {
-        PrepareBuilder();
-        result.repeatedProto2Message_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedProto2Message() {
-        PrepareBuilder();
-        result.repeatedProto2Message_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {
-        get { return PrepareBuilder().repeatedNestedEnum_; }
-      }
-      public int RepeatedNestedEnumCount {
-        get { return result.RepeatedNestedEnumCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {
-        return result.GetRepeatedNestedEnum(index);
-      }
-      public Builder SetRepeatedNestedEnum(int index, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.repeatedNestedEnum_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedNestedEnum(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.repeatedNestedEnum_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedNestedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum> values) {
-        PrepareBuilder();
-        result.repeatedNestedEnum_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedNestedEnum() {
-        PrepareBuilder();
-        result.repeatedNestedEnum_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum> RepeatedForeignEnumList {
-        get { return PrepareBuilder().repeatedForeignEnum_; }
-      }
-      public int RepeatedForeignEnumCount {
-        get { return result.RepeatedForeignEnumCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum GetRepeatedForeignEnum(int index) {
-        return result.GetRepeatedForeignEnum(index);
-      }
-      public Builder SetRepeatedForeignEnum(int index, global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum value) {
-        PrepareBuilder();
-        result.repeatedForeignEnum_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedForeignEnum(global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum value) {
-        PrepareBuilder();
-        result.repeatedForeignEnum_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedForeignEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignEnum> values) {
-        PrepareBuilder();
-        result.repeatedForeignEnum_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedForeignEnum() {
-        PrepareBuilder();
-        result.repeatedForeignEnum_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedStringPieceList {
-        get { return PrepareBuilder().repeatedStringPiece_; }
-      }
-      public int RepeatedStringPieceCount {
-        get { return result.RepeatedStringPieceCount; }
-      }
-      public string GetRepeatedStringPiece(int index) {
-        return result.GetRepeatedStringPiece(index);
-      }
-      public Builder SetRepeatedStringPiece(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedStringPiece_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedStringPiece(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedStringPiece_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedStringPiece(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedStringPiece_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedStringPiece() {
-        PrepareBuilder();
-        result.repeatedStringPiece_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<string> RepeatedCordList {
-        get { return PrepareBuilder().repeatedCord_; }
-      }
-      public int RepeatedCordCount {
-        get { return result.RepeatedCordCount; }
-      }
-      public string GetRepeatedCord(int index) {
-        return result.GetRepeatedCord(index);
-      }
-      public Builder SetRepeatedCord(int index, string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedCord_[index] = value;
-        return this;
-      }
-      public Builder AddRepeatedCord(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedCord_.Add(value);
-        return this;
-      }
-      public Builder AddRangeRepeatedCord(scg::IEnumerable<string> values) {
-        PrepareBuilder();
-        result.repeatedCord_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedCord() {
-        PrepareBuilder();
-        result.repeatedCord_.Clear();
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage> RepeatedLazyMessageList {
-        get { return PrepareBuilder().repeatedLazyMessage_; }
-      }
-      public int RepeatedLazyMessageCount {
-        get { return result.RepeatedLazyMessageCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage GetRepeatedLazyMessage(int index) {
-        return result.GetRepeatedLazyMessage(index);
-      }
-      public Builder SetRepeatedLazyMessage(int index, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedLazyMessage_[index] = value;
-        return this;
-      }
-      public Builder SetRepeatedLazyMessage(int index, global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedLazyMessage_[index] = builderForValue.Build();
-        return this;
-      }
-      public Builder AddRepeatedLazyMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.repeatedLazyMessage_.Add(value);
-        return this;
-      }
-      public Builder AddRepeatedLazyMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.repeatedLazyMessage_.Add(builderForValue.Build());
-        return this;
-      }
-      public Builder AddRangeRepeatedLazyMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage> values) {
-        PrepareBuilder();
-        result.repeatedLazyMessage_.Add(values);
-        return this;
-      }
-      public Builder ClearRepeatedLazyMessage() {
-        PrepareBuilder();
-        result.repeatedLazyMessage_.Clear();
-        return this;
-      }
-
-      public uint OneofUint32 {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofUint32 ? (uint) result.oneofField_ : 0; }
-        set { SetOneofUint32(value); }
-      }
-      public Builder SetOneofUint32(uint value) {
-        PrepareBuilder();
-        result.oneofField_ = value;
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
-        return this;
-      }
-      public Builder ClearOneofUint32() {
-        PrepareBuilder();
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
-          result.oneofFieldCase_ = OneofFieldOneofCase.None;
-        }
-        return this;
-      }
-
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage OneofNestedMessage {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage ? (global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage) result.oneofField_ : global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance; }
-        set { SetOneofNestedMessage(value); }
-      }
-      public Builder SetOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
-        result.oneofField_ = value;
-        return this;
-      }
-      public Builder SetOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
-        result.oneofField_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeOneofNestedMessage(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage &&
-            result.OneofNestedMessage != global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.DefaultInstance) {
-          result.oneofField_ = global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedMessage.CreateBuilder(result.OneofNestedMessage).MergeFrom(value).BuildPartial();
-        } else {
-          result.oneofField_ = value;
-        }
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofNestedMessage;
-        return this;
-      }
-      public Builder ClearOneofNestedMessage() {
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
-          PrepareBuilder();
-          result.oneofFieldCase_ = OneofFieldOneofCase.None;
-          result.oneofField_ = null;
-        }
-        return this;
-      }
-
-      public string OneofString {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofString ? (string) result.oneofField_ : ""; }
-        set { SetOneofString(value); }
-      }
-      public Builder SetOneofString(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.oneofField_ = value;
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofString;
-        return this;
-      }
-      public Builder ClearOneofString() {
-        PrepareBuilder();
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
-          result.oneofFieldCase_ = OneofFieldOneofCase.None;
-        }
-        return this;
-      }
-
-      public global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum OneofEnum {
-        get { return result.oneofFieldCase_ == OneofFieldOneofCase.OneofEnum ? (global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum) result.oneofField_ : global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum.FOO; }
-        set { SetOneofEnum(value); }
-      }
-      public Builder SetOneofEnum(global::Google.ProtocolBuffers.TestProtos.Proto3.TestAllTypes.Types.NestedEnum value) {
-        PrepareBuilder();
-        result.oneofField_ = value;
-        result.oneofFieldCase_ = OneofFieldOneofCase.OneofEnum;
-        return this;
-      }
-      public Builder ClearOneofEnum() {
-        PrepareBuilder();
-        if (result.oneofFieldCase_ == OneofFieldOneofCase.OneofEnum) {
-          result.oneofFieldCase_ = OneofFieldOneofCase.None;
-        }
-        return this;
-      }
-
-      public OneofFieldOneofCase OneofFieldCase {
-        get { return result.oneofFieldCase_; }
-      }
-      public Builder ClearOneofField() {
-        PrepareBuilder();
-        result.oneofField_ = null;
-        result.oneofFieldCase_ = OneofFieldOneofCase.None;
-        return this;
-      }
-    }
-    static TestAllTypes() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestProto2Required : pb::GeneratedMessage<TestProto2Required, TestProto2Required.Builder> {
-    private TestProto2Required() { }
-    private static readonly TestProto2Required defaultInstance = new TestProto2Required().MakeReadOnly();
-    private static readonly string[] _testProto2RequiredFieldNames = new string[] { "proto2" };
-    private static readonly uint[] _testProto2RequiredFieldTags = new uint[] { 10 };
-    public static TestProto2Required DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestProto2Required DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestProto2Required ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.internal__static_proto2_nofieldpresence_unittest_TestProto2Required__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestProto2Required, TestProto2Required.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.internal__static_proto2_nofieldpresence_unittest_TestProto2Required__FieldAccessorTable; }
-    }
-
-    public const int Proto2FieldNumber = 1;
-    private bool hasProto2;
-    private global::Google.ProtocolBuffers.TestProtos.TestRequired proto2_;
-    public bool HasProto2 {
-      get { return hasProto2; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestRequired Proto2 {
-      get { return proto2_ ?? global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _testProto2RequiredFieldNames;
-      if (hasProto2) {
-        output.WriteMessage(1, field_names[0], Proto2);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasProto2) {
-        size += pb::CodedOutputStream.ComputeMessageSize(1, Proto2);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static TestProto2Required ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestProto2Required ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestProto2Required ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestProto2Required ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestProto2Required ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestProto2Required ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestProto2Required ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestProto2Required ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestProto2Required ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestProto2Required ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestProto2Required MakeReadOnly() {
-      return this;
-    }
-
-    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(TestProto2Required prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestProto2Required, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestProto2Required cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestProto2Required result;
-
-      private TestProto2Required PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestProto2Required original = result;
-          result = new TestProto2Required();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestProto2Required MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Proto3.TestProto2Required.Descriptor; }
-      }
-
-      public override TestProto2Required DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Proto3.TestProto2Required.DefaultInstance; }
-      }
-
-      public override TestProto2Required BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is TestProto2Required) {
-          return MergeFrom((TestProto2Required) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(TestProto2Required other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Proto3.TestProto2Required.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasProto2) {
-          MergeProto2(other.Proto2);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_testProto2RequiredFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _testProto2RequiredFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 10: {
-              global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder();
-              if (result.hasProto2) {
-                subBuilder.MergeFrom(Proto2);
-              }
-              input.ReadMessage(subBuilder, extensionRegistry);
-              Proto2 = subBuilder.BuildPartial();
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasProto2 {
-       get { return result.hasProto2; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestRequired Proto2 {
-        get { return result.Proto2; }
-        set { SetProto2(value); }
-      }
-      public Builder SetProto2(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasProto2 = true;
-        result.proto2_ = value;
-        return this;
-      }
-      public Builder SetProto2(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasProto2 = true;
-        result.proto2_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeProto2(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasProto2 &&
-            result.proto2_ != global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) {
-            result.proto2_ = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder(result.proto2_).MergeFrom(value).BuildPartial();
-        } else {
-          result.proto2_ = value;
-        }
-        result.hasProto2 = true;
-        return this;
-      }
-      public Builder ClearProto2() {
-        PrepareBuilder();
-        result.hasProto2 = false;
-        result.proto2_ = null;
-        return this;
-      }
-    }
-    static TestProto2Required() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class ForeignMessage : pb::GeneratedMessage<ForeignMessage, ForeignMessage.Builder> {
-    private ForeignMessage() { }
-    private static readonly ForeignMessage defaultInstance = new ForeignMessage().MakeReadOnly();
-    private static readonly string[] _foreignMessageFieldNames = new string[] { "c" };
-    private static readonly uint[] _foreignMessageFieldTags = new uint[] { 8 };
-    public static ForeignMessage DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override ForeignMessage DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override ForeignMessage ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.internal__static_proto2_nofieldpresence_unittest_ForeignMessage__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<ForeignMessage, ForeignMessage.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.internal__static_proto2_nofieldpresence_unittest_ForeignMessage__FieldAccessorTable; }
-    }
-
-    public const int CFieldNumber = 1;
-    private int c_;
-    public int C {
-      get { return c_; }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _foreignMessageFieldNames;
-      if (C != 0) {
-        output.WriteInt32(1, field_names[0], C);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (C != 0) {
-        size += pb::CodedOutputStream.ComputeInt32Size(1, C);
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static ForeignMessage ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static ForeignMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private ForeignMessage MakeReadOnly() {
-      return this;
-    }
-
-    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(ForeignMessage prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<ForeignMessage, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(ForeignMessage cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private ForeignMessage result;
-
-      private ForeignMessage PrepareBuilder() {
-        if (resultIsReadOnly) {
-          ForeignMessage original = result;
-          result = new ForeignMessage();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override ForeignMessage MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.Descriptor; }
-      }
-
-      public override ForeignMessage DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.DefaultInstance; }
-      }
-
-      public override ForeignMessage BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is ForeignMessage) {
-          return MergeFrom((ForeignMessage) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(ForeignMessage other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.Proto3.ForeignMessage.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.C != 0) {
-          C = other.C;
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_foreignMessageFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _foreignMessageFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              input.ReadInt32(ref result.c_);
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public int C {
-        get { return result.C; }
-        set { SetC(value); }
-      }
-      public Builder SetC(int value) {
-        PrepareBuilder();
-        result.c_ = value;
-        return this;
-      }
-      public Builder ClearC() {
-        PrepareBuilder();
-        result.c_ = 0;
-        return this;
-      }
-    }
-    static ForeignMessage() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.Proto3.UnittestNoFieldPresence.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 0 - 738
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestOptimizeFor.cs

@@ -1,738 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unittest_optimize_for.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnittestOptimizeFor {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.TestExtension);
-      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.TestExtension2);
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOptimizedForSize__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder> internal__static_protobuf_unittest_TestOptimizedForSize__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequiredOptimizedForSize__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Builder> internal__static_protobuf_unittest_TestRequiredOptimizedForSize__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOptionalOptimizedForSize__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize.Builder> internal__static_protobuf_unittest_TestOptionalOptimizedForSize__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnittestOptimizeFor() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "Citnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfb3B0aW1pemVfZm9yLnByb3Rv", 
-            "EhFwcm90b2J1Zl91bml0dGVzdBoeZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0", 
-            "LnByb3RvIsoCChRUZXN0T3B0aW1pemVkRm9yU2l6ZRIJCgFpGAEgASgFEi4K", 
-            "A21zZxgTIAEoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25NZXNzYWdl", 
-            "EhcKDWludGVnZXJfZmllbGQYAiABKAVIABIWCgxzdHJpbmdfZmllbGQYAyAB", 
-            "KAlIACoJCOgHEICAgIACMkAKDnRlc3RfZXh0ZW5zaW9uEicucHJvdG9idWZf", 
-            "dW5pdHRlc3QuVGVzdE9wdGltaXplZEZvclNpemUY0gkgASgFMnIKD3Rlc3Rf", 
-            "ZXh0ZW5zaW9uMhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RPcHRpbWl6ZWRG", 
-            "b3JTaXplGNMJIAEoCzIvLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RSZXF1aXJl", 
-            "ZE9wdGltaXplZEZvclNpemVCBQoDZm9vIikKHFRlc3RSZXF1aXJlZE9wdGlt", 
-            "aXplZEZvclNpemUSCQoBeBgBIAIoBSJaChxUZXN0T3B0aW9uYWxPcHRpbWl6", 
-            "ZWRGb3JTaXplEjoKAW8YASABKAsyLy5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 
-            "UmVxdWlyZWRPcHRpbWl6ZWRGb3JTaXplQiZIAqoCIUdvb2dsZS5Qcm90b2Nv", 
-          "bEJ1ZmZlcnMuVGVzdFByb3Rvcw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_protobuf_unittest_TestOptimizedForSize__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_protobuf_unittest_TestOptimizedForSize__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder>(internal__static_protobuf_unittest_TestOptimizedForSize__Descriptor,
-                new string[] { "I", "Msg", "IntegerField", "StringField", "Foo", });
-        global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.TestExtension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Descriptor.Extensions[0]);
-        global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.TestExtension2 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Descriptor.Extensions[1]);
-        internal__static_protobuf_unittest_TestRequiredOptimizedForSize__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_protobuf_unittest_TestRequiredOptimizedForSize__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Builder>(internal__static_protobuf_unittest_TestRequiredOptimizedForSize__Descriptor,
-                new string[] { "X", });
-        internal__static_protobuf_unittest_TestOptionalOptimizedForSize__Descriptor = Descriptor.MessageTypes[2];
-        internal__static_protobuf_unittest_TestOptionalOptimizedForSize__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize.Builder>(internal__static_protobuf_unittest_TestOptionalOptimizedForSize__Descriptor,
-                new string[] { "O", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        global::Google.ProtocolBuffers.TestProtos.Unittest.RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          global::Google.ProtocolBuffers.TestProtos.Unittest.Descriptor, 
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestOptimizedForSize : pb::ExtendableMessage<TestOptimizedForSize, TestOptimizedForSize.Builder> {
-    private TestOptimizedForSize() { }
-    private static readonly TestOptimizedForSize defaultInstance = new TestOptimizedForSize().MakeReadOnly();
-    public static TestOptimizedForSize DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestOptimizedForSize DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestOptimizedForSize ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.internal__static_protobuf_unittest_TestOptimizedForSize__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestOptimizedForSize, TestOptimizedForSize.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.internal__static_protobuf_unittest_TestOptimizedForSize__FieldAccessorTable; }
-    }
-
-    public const int TestExtensionFieldNumber = 1234;
-    public static pb::GeneratedExtensionBase<int> TestExtension;
-    public const int TestExtension2FieldNumber = 1235;
-    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize> TestExtension2;
-    private object foo_;
-    public enum FooOneofCase {
-      IntegerField = 2,
-      StringField = 3,
-      None = 0,
-    }
-    private FooOneofCase fooCase_ = FooOneofCase.None;
-    public FooOneofCase FooCase {
-      get { return fooCase_; }
-    }
-
-    public const int IFieldNumber = 1;
-    private bool hasI;
-    private int i_;
-    public bool HasI {
-      get { return hasI; }
-    }
-    public int I {
-      get { return i_; }
-    }
-
-    public const int MsgFieldNumber = 19;
-    private bool hasMsg;
-    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage msg_;
-    public bool HasMsg {
-      get { return hasMsg; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage Msg {
-      get { return msg_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }
-    }
-
-    public const int IntegerFieldFieldNumber = 2;
-    public bool HasIntegerField {
-      get { return fooCase_ == FooOneofCase.IntegerField; }
-    }
-    public int IntegerField {
-      get { return fooCase_ == FooOneofCase.IntegerField ? (int) foo_ : 0; }
-    }
-
-    public const int StringFieldFieldNumber = 3;
-    public bool HasStringField {
-      get { return fooCase_ == FooOneofCase.StringField; }
-    }
-    public string StringField {
-      get { return fooCase_ == FooOneofCase.StringField ? (string) foo_ : ""; }
-    }
-
-    public static TestOptimizedForSize ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOptimizedForSize ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestOptimizedForSize MakeReadOnly() {
-      return this;
-    }
-
-    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(TestOptimizedForSize prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::ExtendableBuilder<TestOptimizedForSize, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestOptimizedForSize cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestOptimizedForSize result;
-
-      private TestOptimizedForSize PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestOptimizedForSize original = result;
-          result = new TestOptimizedForSize();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestOptimizedForSize MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Descriptor; }
-      }
-
-      public override TestOptimizedForSize DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.DefaultInstance; }
-      }
-
-      public override TestOptimizedForSize BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-
-      public bool HasI {
-        get { return result.hasI; }
-      }
-      public int I {
-        get { return result.I; }
-        set { SetI(value); }
-      }
-      public Builder SetI(int value) {
-        PrepareBuilder();
-        result.hasI = true;
-        result.i_ = value;
-        return this;
-      }
-      public Builder ClearI() {
-        PrepareBuilder();
-        result.hasI = false;
-        result.i_ = 0;
-        return this;
-      }
-
-      public bool HasMsg {
-       get { return result.hasMsg; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage Msg {
-        get { return result.Msg; }
-        set { SetMsg(value); }
-      }
-      public Builder SetMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasMsg = true;
-        result.msg_ = value;
-        return this;
-      }
-      public Builder SetMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasMsg = true;
-        result.msg_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasMsg &&
-            result.msg_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {
-            result.msg_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.msg_).MergeFrom(value).BuildPartial();
-        } else {
-          result.msg_ = value;
-        }
-        result.hasMsg = true;
-        return this;
-      }
-      public Builder ClearMsg() {
-        PrepareBuilder();
-        result.hasMsg = false;
-        result.msg_ = null;
-        return this;
-      }
-
-      public bool HasIntegerField {
-        get { return result.fooCase_ == FooOneofCase.IntegerField; }
-      }
-      public int IntegerField {
-        get { return result.fooCase_ == FooOneofCase.IntegerField ? (int) result.foo_ : 0; }
-        set { SetIntegerField(value); }
-      }
-      public Builder SetIntegerField(int value) {
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.IntegerField;
-        return this;
-      }
-      public Builder ClearIntegerField() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.IntegerField) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public bool HasStringField {
-        get { return result.fooCase_ == FooOneofCase.StringField; }
-      }
-      public string StringField {
-        get { return result.fooCase_ == FooOneofCase.StringField ? (string) result.foo_ : ""; }
-        set { SetStringField(value); }
-      }
-      public Builder SetStringField(string value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.foo_ = value;
-        result.fooCase_ = FooOneofCase.StringField;
-        return this;
-      }
-      public Builder ClearStringField() {
-        PrepareBuilder();
-        if (result.fooCase_ == FooOneofCase.StringField) {
-          result.fooCase_ = FooOneofCase.None;
-        }
-        return this;
-      }
-
-      public FooOneofCase FooCase {
-        get { return result.fooCase_; }
-      }
-      public Builder ClearFoo() {
-        PrepareBuilder();
-        result.foo_ = null;
-        result.fooCase_ = FooOneofCase.None;
-        return this;
-      }
-    }
-    static TestOptimizedForSize() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestRequiredOptimizedForSize : pb::GeneratedMessage<TestRequiredOptimizedForSize, TestRequiredOptimizedForSize.Builder> {
-    private TestRequiredOptimizedForSize() { }
-    private static readonly TestRequiredOptimizedForSize defaultInstance = new TestRequiredOptimizedForSize().MakeReadOnly();
-    public static TestRequiredOptimizedForSize DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestRequiredOptimizedForSize DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestRequiredOptimizedForSize ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.internal__static_protobuf_unittest_TestRequiredOptimizedForSize__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestRequiredOptimizedForSize, TestRequiredOptimizedForSize.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.internal__static_protobuf_unittest_TestRequiredOptimizedForSize__FieldAccessorTable; }
-    }
-
-    public const int XFieldNumber = 1;
-    private bool hasX;
-    private int x_;
-    public bool HasX {
-      get { return hasX; }
-    }
-    public int X {
-      get { return x_; }
-    }
-
-    public static TestRequiredOptimizedForSize ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestRequiredOptimizedForSize ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestRequiredOptimizedForSize MakeReadOnly() {
-      return this;
-    }
-
-    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(TestRequiredOptimizedForSize prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestRequiredOptimizedForSize, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestRequiredOptimizedForSize cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestRequiredOptimizedForSize result;
-
-      private TestRequiredOptimizedForSize PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestRequiredOptimizedForSize original = result;
-          result = new TestRequiredOptimizedForSize();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestRequiredOptimizedForSize MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Descriptor; }
-      }
-
-      public override TestRequiredOptimizedForSize DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.DefaultInstance; }
-      }
-
-      public override TestRequiredOptimizedForSize BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-
-      public bool HasX {
-        get { return result.hasX; }
-      }
-      public int X {
-        get { return result.X; }
-        set { SetX(value); }
-      }
-      public Builder SetX(int value) {
-        PrepareBuilder();
-        result.hasX = true;
-        result.x_ = value;
-        return this;
-      }
-      public Builder ClearX() {
-        PrepareBuilder();
-        result.hasX = false;
-        result.x_ = 0;
-        return this;
-      }
-    }
-    static TestRequiredOptimizedForSize() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class TestOptionalOptimizedForSize : pb::GeneratedMessage<TestOptionalOptimizedForSize, TestOptionalOptimizedForSize.Builder> {
-    private TestOptionalOptimizedForSize() { }
-    private static readonly TestOptionalOptimizedForSize defaultInstance = new TestOptionalOptimizedForSize().MakeReadOnly();
-    public static TestOptionalOptimizedForSize DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override TestOptionalOptimizedForSize DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override TestOptionalOptimizedForSize ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.internal__static_protobuf_unittest_TestOptionalOptimizedForSize__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<TestOptionalOptimizedForSize, TestOptionalOptimizedForSize.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.internal__static_protobuf_unittest_TestOptionalOptimizedForSize__FieldAccessorTable; }
-    }
-
-    public const int OFieldNumber = 1;
-    private bool hasO;
-    private global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize o_;
-    public bool HasO {
-      get { return hasO; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize O {
-      get { return o_ ?? global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.DefaultInstance; }
-    }
-
-    public static TestOptionalOptimizedForSize ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static TestOptionalOptimizedForSize ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private TestOptionalOptimizedForSize MakeReadOnly() {
-      return this;
-    }
-
-    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(TestOptionalOptimizedForSize prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<TestOptionalOptimizedForSize, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(TestOptionalOptimizedForSize cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private TestOptionalOptimizedForSize result;
-
-      private TestOptionalOptimizedForSize PrepareBuilder() {
-        if (resultIsReadOnly) {
-          TestOptionalOptimizedForSize original = result;
-          result = new TestOptionalOptimizedForSize();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override TestOptionalOptimizedForSize MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize.Descriptor; }
-      }
-
-      public override TestOptionalOptimizedForSize DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize.DefaultInstance; }
-      }
-
-      public override TestOptionalOptimizedForSize BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-
-      public bool HasO {
-       get { return result.hasO; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize O {
-        get { return result.O; }
-        set { SetO(value); }
-      }
-      public Builder SetO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        result.hasO = true;
-        result.o_ = value;
-        return this;
-      }
-      public Builder SetO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Builder builderForValue) {
-        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
-        PrepareBuilder();
-        result.hasO = true;
-        result.o_ = builderForValue.Build();
-        return this;
-      }
-      public Builder MergeO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize value) {
-        pb::ThrowHelper.ThrowIfNull(value, "value");
-        PrepareBuilder();
-        if (result.hasO &&
-            result.o_ != global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.DefaultInstance) {
-            result.o_ = global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.CreateBuilder(result.o_).MergeFrom(value).BuildPartial();
-        } else {
-          result.o_ = value;
-        }
-        result.hasO = true;
-        return this;
-      }
-      public Builder ClearO() {
-        PrepareBuilder();
-        result.hasO = false;
-        result.o_ = null;
-        return this;
-      }
-    }
-    static TestOptionalOptimizedForSize() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnittestOptimizeFor.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 6060 - 0
csharp/src/ProtocolBuffers.Test/TestProtos/UnittestProto3.cs

@@ -0,0 +1,6060 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/protobuf/unittest_proto3.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbd = global::Google.Protobuf.Descriptors;
+using scg = global::System.Collections.Generic;
+namespace Google.Protobuf.TestProtos {
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public static partial class UnittestProto3 {
+
+    #region Static variables
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestAllTypes> internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage> internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.NestedTestAllTypes> internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestDeprecatedFields> internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ForeignMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.ForeignMessage> internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReservedFields__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestReservedFields> internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestForeignNested__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestForeignNested> internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestReallyLargeTagNumber> internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestRecursiveMessage> internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestMutualRecursionA> internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestMutualRecursionB> internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestCamelCaseFieldNames> internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestFieldOrderings> internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage> internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SparseEnumMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.SparseEnumMessage> internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneString__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.OneString> internal__static_protobuf_unittest_OneString__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_MoreString__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.MoreString> internal__static_protobuf_unittest_MoreString__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneBytes__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.OneBytes> internal__static_protobuf_unittest_OneBytes__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_MoreBytes__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.MoreBytes> internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Int32Message__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Int32Message> internal__static_protobuf_unittest_Int32Message__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Uint32Message__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Uint32Message> internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Int64Message__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Int64Message> internal__static_protobuf_unittest_Int64Message__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Uint64Message__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Uint64Message> internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BoolMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BoolMessage> internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOneof__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestOneof> internal__static_protobuf_unittest_TestOneof__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedTypes__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestPackedTypes> internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestUnpackedTypes> internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestRepeatedScalarDifferentTagSizes> internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestCommentInjectionMessage> internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooRequest__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooRequest> internal__static_protobuf_unittest_FooRequest__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooResponse__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooResponse> internal__static_protobuf_unittest_FooResponse__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooClientMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooClientMessage> internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooServerMessage__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooServerMessage> internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarRequest__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BarRequest> internal__static_protobuf_unittest_BarRequest__FieldAccessorTable;
+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarResponse__Descriptor;
+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BarResponse> internal__static_protobuf_unittest_BarResponse__FieldAccessorTable;
+    #endregion
+    #region Descriptor
+    public static pbd::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbd::FileDescriptor descriptor;
+
+    static UnittestProto3() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          string.Concat(
+            "CiVnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfcHJvdG8zLnByb3RvEhFwcm90", 
+            "b2J1Zl91bml0dGVzdBosZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0X2ltcG9y", 
+            "dF9wcm90bzMucHJvdG8i8A8KDFRlc3RBbGxUeXBlcxIUCgxzaW5nbGVfaW50", 
+            "MzIYASABKAUSFAoMc2luZ2xlX2ludDY0GAIgASgDEhUKDXNpbmdsZV91aW50", 
+            "MzIYAyABKA0SFQoNc2luZ2xlX3VpbnQ2NBgEIAEoBBIVCg1zaW5nbGVfc2lu", 
+            "dDMyGAUgASgREhUKDXNpbmdsZV9zaW50NjQYBiABKBISFgoOc2luZ2xlX2Zp", 
+            "eGVkMzIYByABKAcSFgoOc2luZ2xlX2ZpeGVkNjQYCCABKAYSFwoPc2luZ2xl", 
+            "X3NmaXhlZDMyGAkgASgPEhcKD3NpbmdsZV9zZml4ZWQ2NBgKIAEoEBIUCgxz", 
+            "aW5nbGVfZmxvYXQYCyABKAISFQoNc2luZ2xlX2RvdWJsZRgMIAEoARITCgtz", 
+            "aW5nbGVfYm9vbBgNIAEoCBIVCg1zaW5nbGVfc3RyaW5nGA4gASgJEhQKDHNp", 
+            "bmdsZV9ieXRlcxgPIAEoDBJMChVzaW5nbGVfbmVzdGVkX21lc3NhZ2UYEiAB", 
+            "KAsyLS5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVz", 
+            "c2FnZRJBChZzaW5nbGVfZm9yZWlnbl9tZXNzYWdlGBMgASgLMiEucHJvdG9i", 
+            "dWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USRgoVc2luZ2xlX2ltcG9ydF9t", 
+            "ZXNzYWdlGBQgASgLMicucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9y", 
+            "dE1lc3NhZ2USRgoSc2luZ2xlX25lc3RlZF9lbnVtGBUgASgOMioucHJvdG9i", 
+            "dWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0SOwoTc2luZ2xl", 
+            "X2ZvcmVpZ25fZW51bRgWIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp", 
+            "Z25FbnVtEkAKEnNpbmdsZV9pbXBvcnRfZW51bRgXIAEoDjIkLnByb3RvYnVm", 
+            "X3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtElMKHHNpbmdsZV9wdWJsaWNf", 
+            "aW1wb3J0X21lc3NhZ2UYGiABKAsyLS5wcm90b2J1Zl91bml0dGVzdF9pbXBv", 
+            "cnQuUHVibGljSW1wb3J0TWVzc2FnZRIWCg5yZXBlYXRlZF9pbnQzMhgfIAMo", 
+            "BRIWCg5yZXBlYXRlZF9pbnQ2NBggIAMoAxIXCg9yZXBlYXRlZF91aW50MzIY", 
+            "ISADKA0SFwoPcmVwZWF0ZWRfdWludDY0GCIgAygEEhcKD3JlcGVhdGVkX3Np", 
+            "bnQzMhgjIAMoERIXCg9yZXBlYXRlZF9zaW50NjQYJCADKBISGAoQcmVwZWF0", 
+            "ZWRfZml4ZWQzMhglIAMoBxIYChByZXBlYXRlZF9maXhlZDY0GCYgAygGEhkK", 
+            "EXJlcGVhdGVkX3NmaXhlZDMyGCcgAygPEhkKEXJlcGVhdGVkX3NmaXhlZDY0", 
+            "GCggAygQEhYKDnJlcGVhdGVkX2Zsb2F0GCkgAygCEhcKD3JlcGVhdGVkX2Rv", 
+            "dWJsZRgqIAMoARIVCg1yZXBlYXRlZF9ib29sGCsgAygIEhcKD3JlcGVhdGVk", 
+            "X3N0cmluZxgsIAMoCRIWCg5yZXBlYXRlZF9ieXRlcxgtIAMoDBJOChdyZXBl", 
+            "YXRlZF9uZXN0ZWRfbWVzc2FnZRgwIAMoCzItLnByb3RvYnVmX3VuaXR0ZXN0", 
+            "LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlEkMKGHJlcGVhdGVkX2ZvcmVp", 
+            "Z25fbWVzc2FnZRgxIAMoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25N", 
+            "ZXNzYWdlEkgKF3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdlGDIgAygLMicucHJv", 
+            "dG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2USSAoUcmVwZWF0", 
+            "ZWRfbmVzdGVkX2VudW0YMyADKA4yKi5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 
+            "QWxsVHlwZXMuTmVzdGVkRW51bRI9ChVyZXBlYXRlZF9mb3JlaWduX2VudW0Y", 
+            "NCADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bRJCChRyZXBl", 
+            "YXRlZF9pbXBvcnRfZW51bRg1IAMoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2lt", 
+            "cG9ydC5JbXBvcnRFbnVtElUKHnJlcGVhdGVkX3B1YmxpY19pbXBvcnRfbWVz", 
+            "c2FnZRg2IAMoCzItLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5QdWJsaWNJ", 
+            "bXBvcnRNZXNzYWdlEhYKDG9uZW9mX3VpbnQzMhhvIAEoDUgAEk0KFG9uZW9m", 
+            "X25lc3RlZF9tZXNzYWdlGHAgASgLMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVz", 
+            "dEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2VIABIWCgxvbmVvZl9zdHJpbmcYcSAB", 
+            "KAlIABIVCgtvbmVvZl9ieXRlcxhyIAEoDEgAGhsKDU5lc3RlZE1lc3NhZ2US", 
+            "CgoCYmIYASABKAUiVgoKTmVzdGVkRW51bRIbChdORVNURURfRU5VTV9VTlNQ", 
+            "RUNJRklFRBAAEgcKA0ZPTxABEgcKA0JBUhACEgcKA0JBWhADEhAKA05FRxD/", 
+            "//////////8BQg0KC29uZW9mX2ZpZWxkIrsBChJOZXN0ZWRUZXN0QWxsVHlw", 
+            "ZXMSNAoFY2hpbGQYASABKAsyJS5wcm90b2J1Zl91bml0dGVzdC5OZXN0ZWRU", 
+            "ZXN0QWxsVHlwZXMSMAoHcGF5bG9hZBgCIAEoCzIfLnByb3RvYnVmX3VuaXR0", 
+            "ZXN0LlRlc3RBbGxUeXBlcxI9Cg5yZXBlYXRlZF9jaGlsZBgDIAMoCzIlLnBy", 
+            "b3RvYnVmX3VuaXR0ZXN0Lk5lc3RlZFRlc3RBbGxUeXBlcyI0ChRUZXN0RGVw", 
+            "cmVjYXRlZEZpZWxkcxIcChBkZXByZWNhdGVkX2ludDMyGAEgASgFQgIYASIb", 
+            "Cg5Gb3JlaWduTWVzc2FnZRIJCgFjGAEgASgFIjAKElRlc3RSZXNlcnZlZEZp", 
+            "ZWxkc0oECAIQA0oECA8QEEoECAkQDFIDYmFyUgNiYXoiWgoRVGVzdEZvcmVp", 
+            "Z25OZXN0ZWQSRQoOZm9yZWlnbl9uZXN0ZWQYASABKAsyLS5wcm90b2J1Zl91", 
+            "bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZSI0ChhUZXN0UmVh", 
+            "bGx5TGFyZ2VUYWdOdW1iZXISCQoBYRgBIAEoBRINCgJiYhj///9/IAEoBSJV", 
+            "ChRUZXN0UmVjdXJzaXZlTWVzc2FnZRIyCgFhGAEgASgLMicucHJvdG9idWZf", 
+            "dW5pdHRlc3QuVGVzdFJlY3Vyc2l2ZU1lc3NhZ2USCQoBaRgCIAEoBSJLChRU", 
+            "ZXN0TXV0dWFsUmVjdXJzaW9uQRIzCgJiYhgBIAEoCzInLnByb3RvYnVmX3Vu", 
+            "aXR0ZXN0LlRlc3RNdXR1YWxSZWN1cnNpb25CImIKFFRlc3RNdXR1YWxSZWN1", 
+            "cnNpb25CEjIKAWEYASABKAsyJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0TXV0", 
+            "dWFsUmVjdXJzaW9uQRIWCg5vcHRpb25hbF9pbnQzMhgCIAEoBSLrAgoXVGVz", 
+            "dENhbWVsQ2FzZUZpZWxkTmFtZXMSFgoOUHJpbWl0aXZlRmllbGQYASABKAUS", 
+            "EwoLU3RyaW5nRmllbGQYAiABKAkSMQoJRW51bUZpZWxkGAMgASgOMh4ucHJv", 
+            "dG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW0SNwoMTWVzc2FnZUZpZWxkGAQg", 
+            "ASgLMiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USHgoWUmVw", 
+            "ZWF0ZWRQcmltaXRpdmVGaWVsZBgHIAMoBRIbChNSZXBlYXRlZFN0cmluZ0Zp", 
+            "ZWxkGAggAygJEjkKEVJlcGVhdGVkRW51bUZpZWxkGAkgAygOMh4ucHJvdG9i", 
+            "dWZfdW5pdHRlc3QuRm9yZWlnbkVudW0SPwoUUmVwZWF0ZWRNZXNzYWdlRmll", 
+            "bGQYCiADKAsyIS5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduTWVzc2FnZSLH", 
+            "AQoSVGVzdEZpZWxkT3JkZXJpbmdzEhEKCW15X3N0cmluZxgLIAEoCRIOCgZt", 
+            "eV9pbnQYASABKAMSEAoIbXlfZmxvYXQYZSABKAISUwoVc2luZ2xlX25lc3Rl", 
+            "ZF9tZXNzYWdlGMgBIAEoCzIzLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RGaWVs", 
+            "ZE9yZGVyaW5ncy5OZXN0ZWRNZXNzYWdlGicKDU5lc3RlZE1lc3NhZ2USCgoC", 
+            "b28YAiABKAMSCgoCYmIYASABKAUiSwoRU3BhcnNlRW51bU1lc3NhZ2USNgoL", 
+            "c3BhcnNlX2VudW0YASABKA4yIS5wcm90b2J1Zl91bml0dGVzdC5UZXN0U3Bh", 
+            "cnNlRW51bSIZCglPbmVTdHJpbmcSDAoEZGF0YRgBIAEoCSIaCgpNb3JlU3Ry", 
+            "aW5nEgwKBGRhdGEYASADKAkiGAoIT25lQnl0ZXMSDAoEZGF0YRgBIAEoDCIZ", 
+            "CglNb3JlQnl0ZXMSDAoEZGF0YRgBIAEoDCIcCgxJbnQzMk1lc3NhZ2USDAoE", 
+            "ZGF0YRgBIAEoBSIdCg1VaW50MzJNZXNzYWdlEgwKBGRhdGEYASABKA0iHAoM", 
+            "SW50NjRNZXNzYWdlEgwKBGRhdGEYASABKAMiHQoNVWludDY0TWVzc2FnZRIM", 
+            "CgRkYXRhGAEgASgEIhsKC0Jvb2xNZXNzYWdlEgwKBGRhdGEYASABKAgicwoJ", 
+            "VGVzdE9uZW9mEhEKB2Zvb19pbnQYASABKAVIABIUCgpmb29fc3RyaW5nGAIg", 
+            "ASgJSAASNgoLZm9vX21lc3NhZ2UYAyABKAsyHy5wcm90b2J1Zl91bml0dGVz", 
+            "dC5UZXN0QWxsVHlwZXNIAEIFCgNmb28iqgMKD1Rlc3RQYWNrZWRUeXBlcxIY", 
+            "CgxwYWNrZWRfaW50MzIYWiADKAVCAhABEhgKDHBhY2tlZF9pbnQ2NBhbIAMo", 
+            "A0ICEAESGQoNcGFja2VkX3VpbnQzMhhcIAMoDUICEAESGQoNcGFja2VkX3Vp", 
+            "bnQ2NBhdIAMoBEICEAESGQoNcGFja2VkX3NpbnQzMhheIAMoEUICEAESGQoN", 
+            "cGFja2VkX3NpbnQ2NBhfIAMoEkICEAESGgoOcGFja2VkX2ZpeGVkMzIYYCAD", 
+            "KAdCAhABEhoKDnBhY2tlZF9maXhlZDY0GGEgAygGQgIQARIbCg9wYWNrZWRf", 
+            "c2ZpeGVkMzIYYiADKA9CAhABEhsKD3BhY2tlZF9zZml4ZWQ2NBhjIAMoEEIC", 
+            "EAESGAoMcGFja2VkX2Zsb2F0GGQgAygCQgIQARIZCg1wYWNrZWRfZG91Ymxl", 
+            "GGUgAygBQgIQARIXCgtwYWNrZWRfYm9vbBhmIAMoCEICEAESNwoLcGFja2Vk", 
+            "X2VudW0YZyADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bUIC", 
+            "EAEiyAMKEVRlc3RVbnBhY2tlZFR5cGVzEhoKDnVucGFja2VkX2ludDMyGFog", 
+            "AygFQgIQABIaCg51bnBhY2tlZF9pbnQ2NBhbIAMoA0ICEAASGwoPdW5wYWNr", 
+            "ZWRfdWludDMyGFwgAygNQgIQABIbCg91bnBhY2tlZF91aW50NjQYXSADKARC", 
+            "AhAAEhsKD3VucGFja2VkX3NpbnQzMhheIAMoEUICEAASGwoPdW5wYWNrZWRf", 
+            "c2ludDY0GF8gAygSQgIQABIcChB1bnBhY2tlZF9maXhlZDMyGGAgAygHQgIQ", 
+            "ABIcChB1bnBhY2tlZF9maXhlZDY0GGEgAygGQgIQABIdChF1bnBhY2tlZF9z", 
+            "Zml4ZWQzMhhiIAMoD0ICEAASHQoRdW5wYWNrZWRfc2ZpeGVkNjQYYyADKBBC", 
+            "AhAAEhoKDnVucGFja2VkX2Zsb2F0GGQgAygCQgIQABIbCg91bnBhY2tlZF9k", 
+            "b3VibGUYZSADKAFCAhAAEhkKDXVucGFja2VkX2Jvb2wYZiADKAhCAhAAEjkK", 
+            "DXVucGFja2VkX2VudW0YZyADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3Jl", 
+            "aWduRW51bUICEAAiwAEKI1Rlc3RSZXBlYXRlZFNjYWxhckRpZmZlcmVudFRh", 
+            "Z1NpemVzEhgKEHJlcGVhdGVkX2ZpeGVkMzIYDCADKAcSFgoOcmVwZWF0ZWRf", 
+            "aW50MzIYDSADKAUSGQoQcmVwZWF0ZWRfZml4ZWQ2NBj+DyADKAYSFwoOcmVw", 
+            "ZWF0ZWRfaW50NjQY/w8gAygDEhgKDnJlcGVhdGVkX2Zsb2F0GP7/DyADKAIS", 
+            "GQoPcmVwZWF0ZWRfdWludDY0GP//DyADKAQiKAobVGVzdENvbW1lbnRJbmpl", 
+            "Y3Rpb25NZXNzYWdlEgkKAWEYASABKAkiDAoKRm9vUmVxdWVzdCINCgtGb29S", 
+            "ZXNwb25zZSISChBGb29DbGllbnRNZXNzYWdlIhIKEEZvb1NlcnZlck1lc3Nh", 
+            "Z2UiDAoKQmFyUmVxdWVzdCINCgtCYXJSZXNwb25zZSpZCgtGb3JlaWduRW51", 
+            "bRIXChNGT1JFSUdOX1VOU1BFQ0lGSUVEEAASDwoLRk9SRUlHTl9GT08QBBIP", 
+            "CgtGT1JFSUdOX0JBUhAFEg8KC0ZPUkVJR05fQkFaEAYqdQoUVGVzdEVudW1X", 
+            "aXRoRHVwVmFsdWUSKAokVEVTVF9FTlVNX1dJVEhfRFVQX1ZBTFVFX1VOU1BF", 
+            "Q0lGSUVEEAASCAoERk9PMRABEggKBEJBUjEQAhIHCgNCQVoQAxIICgRGT08y", 
+            "EAESCAoEQkFSMhACGgIQASqdAQoOVGVzdFNwYXJzZUVudW0SIAocVEVTVF9T", 
+            "UEFSU0VfRU5VTV9VTlNQRUNJRklFRBAAEgwKCFNQQVJTRV9BEHsSDgoIU1BB", 
+            "UlNFX0IQpucDEg8KCFNQQVJTRV9DELKxgAYSFQoIU1BBUlNFX0QQ8f//////", 
+            "////ARIVCghTUEFSU0VfRRC03vz///////8BEgwKCFNQQVJTRV9HEAIymQEK", 
+            "C1Rlc3RTZXJ2aWNlEkQKA0ZvbxIdLnByb3RvYnVmX3VuaXR0ZXN0LkZvb1Jl", 
+            "cXVlc3QaHi5wcm90b2J1Zl91bml0dGVzdC5Gb29SZXNwb25zZRJECgNCYXIS", 
+            "HS5wcm90b2J1Zl91bml0dGVzdC5CYXJSZXF1ZXN0Gh4ucHJvdG9idWZfdW5p", 
+            "dHRlc3QuQmFyUmVzcG9uc2VCOkINVW5pdHRlc3RQcm90b0gBgAEBiAEBkAEB", 
+          "+AEBqgIaR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3NiBnByb3RvMw=="));
+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
+        descriptor = root;
+        internal__static_protobuf_unittest_TestAllTypes__Descriptor = Descriptor.MessageTypes[0];
+        internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestAllTypes>(internal__static_protobuf_unittest_TestAllTypes__Descriptor,
+                new string[] { "SingleInt32", "SingleInt64", "SingleUint32", "SingleUint64", "SingleSint32", "SingleSint64", "SingleFixed32", "SingleFixed64", "SingleSfixed32", "SingleSfixed64", "SingleFloat", "SingleDouble", "SingleBool", "SingleString", "SingleBytes", "SingleNestedMessage", "SingleForeignMessage", "SingleImportMessage", "SingleNestedEnum", "SingleForeignEnum", "SingleImportEnum", "SinglePublicImportMessage", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedImportMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedImportEnum", "RepeatedPublicImportMessage", "OneofUint32", "OneofNestedMessage", "OneofString", "OneofBytes", "OneofField", });
+        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[0];
+        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage>(internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor,
+                new string[] { "Bb", });
+        internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor = Descriptor.MessageTypes[1];
+        internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.NestedTestAllTypes>(internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor,
+                new string[] { "Child", "Payload", "RepeatedChild", });
+        internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor = Descriptor.MessageTypes[2];
+        internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestDeprecatedFields>(internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor,
+                new string[] { "DeprecatedInt32", });
+        internal__static_protobuf_unittest_ForeignMessage__Descriptor = Descriptor.MessageTypes[3];
+        internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.ForeignMessage>(internal__static_protobuf_unittest_ForeignMessage__Descriptor,
+                new string[] { "C", });
+        internal__static_protobuf_unittest_TestReservedFields__Descriptor = Descriptor.MessageTypes[4];
+        internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestReservedFields>(internal__static_protobuf_unittest_TestReservedFields__Descriptor,
+                new string[] { });
+        internal__static_protobuf_unittest_TestForeignNested__Descriptor = Descriptor.MessageTypes[5];
+        internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestForeignNested>(internal__static_protobuf_unittest_TestForeignNested__Descriptor,
+                new string[] { "ForeignNested", });
+        internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor = Descriptor.MessageTypes[6];
+        internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestReallyLargeTagNumber>(internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor,
+                new string[] { "A", "Bb", });
+        internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor = Descriptor.MessageTypes[7];
+        internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestRecursiveMessage>(internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor,
+                new string[] { "A", "I", });
+        internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor = Descriptor.MessageTypes[8];
+        internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestMutualRecursionA>(internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor,
+                new string[] { "Bb", });
+        internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor = Descriptor.MessageTypes[9];
+        internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestMutualRecursionB>(internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor,
+                new string[] { "A", "OptionalInt32", });
+        internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor = Descriptor.MessageTypes[10];
+        internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestCamelCaseFieldNames>(internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor,
+                new string[] { "PrimitiveField", "StringField", "EnumField", "MessageField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedEnumField", "RepeatedMessageField", });
+        internal__static_protobuf_unittest_TestFieldOrderings__Descriptor = Descriptor.MessageTypes[11];
+        internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestFieldOrderings>(internal__static_protobuf_unittest_TestFieldOrderings__Descriptor,
+                new string[] { "MyString", "MyInt", "MyFloat", "SingleNestedMessage", });
+        internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestFieldOrderings__Descriptor.NestedTypes[0];
+        internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage>(internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor,
+                new string[] { "Oo", "Bb", });
+        internal__static_protobuf_unittest_SparseEnumMessage__Descriptor = Descriptor.MessageTypes[12];
+        internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.SparseEnumMessage>(internal__static_protobuf_unittest_SparseEnumMessage__Descriptor,
+                new string[] { "SparseEnum", });
+        internal__static_protobuf_unittest_OneString__Descriptor = Descriptor.MessageTypes[13];
+        internal__static_protobuf_unittest_OneString__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.OneString>(internal__static_protobuf_unittest_OneString__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_MoreString__Descriptor = Descriptor.MessageTypes[14];
+        internal__static_protobuf_unittest_MoreString__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.MoreString>(internal__static_protobuf_unittest_MoreString__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_OneBytes__Descriptor = Descriptor.MessageTypes[15];
+        internal__static_protobuf_unittest_OneBytes__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.OneBytes>(internal__static_protobuf_unittest_OneBytes__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_MoreBytes__Descriptor = Descriptor.MessageTypes[16];
+        internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.MoreBytes>(internal__static_protobuf_unittest_MoreBytes__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_Int32Message__Descriptor = Descriptor.MessageTypes[17];
+        internal__static_protobuf_unittest_Int32Message__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Int32Message>(internal__static_protobuf_unittest_Int32Message__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_Uint32Message__Descriptor = Descriptor.MessageTypes[18];
+        internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Uint32Message>(internal__static_protobuf_unittest_Uint32Message__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_Int64Message__Descriptor = Descriptor.MessageTypes[19];
+        internal__static_protobuf_unittest_Int64Message__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Int64Message>(internal__static_protobuf_unittest_Int64Message__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_Uint64Message__Descriptor = Descriptor.MessageTypes[20];
+        internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.Uint64Message>(internal__static_protobuf_unittest_Uint64Message__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_BoolMessage__Descriptor = Descriptor.MessageTypes[21];
+        internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BoolMessage>(internal__static_protobuf_unittest_BoolMessage__Descriptor,
+                new string[] { "Data", });
+        internal__static_protobuf_unittest_TestOneof__Descriptor = Descriptor.MessageTypes[22];
+        internal__static_protobuf_unittest_TestOneof__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestOneof>(internal__static_protobuf_unittest_TestOneof__Descriptor,
+                new string[] { "FooInt", "FooString", "FooMessage", "Foo", });
+        internal__static_protobuf_unittest_TestPackedTypes__Descriptor = Descriptor.MessageTypes[23];
+        internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestPackedTypes>(internal__static_protobuf_unittest_TestPackedTypes__Descriptor,
+                new string[] { "PackedInt32", "PackedInt64", "PackedUint32", "PackedUint64", "PackedSint32", "PackedSint64", "PackedFixed32", "PackedFixed64", "PackedSfixed32", "PackedSfixed64", "PackedFloat", "PackedDouble", "PackedBool", "PackedEnum", });
+        internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor = Descriptor.MessageTypes[24];
+        internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestUnpackedTypes>(internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor,
+                new string[] { "UnpackedInt32", "UnpackedInt64", "UnpackedUint32", "UnpackedUint64", "UnpackedSint32", "UnpackedSint64", "UnpackedFixed32", "UnpackedFixed64", "UnpackedSfixed32", "UnpackedSfixed64", "UnpackedFloat", "UnpackedDouble", "UnpackedBool", "UnpackedEnum", });
+        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor = Descriptor.MessageTypes[25];
+        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestRepeatedScalarDifferentTagSizes>(internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor,
+                new string[] { "RepeatedFixed32", "RepeatedInt32", "RepeatedFixed64", "RepeatedInt64", "RepeatedFloat", "RepeatedUint64", });
+        internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor = Descriptor.MessageTypes[26];
+        internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.TestCommentInjectionMessage>(internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor,
+                new string[] { "A", });
+        internal__static_protobuf_unittest_FooRequest__Descriptor = Descriptor.MessageTypes[27];
+        internal__static_protobuf_unittest_FooRequest__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooRequest>(internal__static_protobuf_unittest_FooRequest__Descriptor,
+                new string[] { });
+        internal__static_protobuf_unittest_FooResponse__Descriptor = Descriptor.MessageTypes[28];
+        internal__static_protobuf_unittest_FooResponse__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooResponse>(internal__static_protobuf_unittest_FooResponse__Descriptor,
+                new string[] { });
+        internal__static_protobuf_unittest_FooClientMessage__Descriptor = Descriptor.MessageTypes[29];
+        internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooClientMessage>(internal__static_protobuf_unittest_FooClientMessage__Descriptor,
+                new string[] { });
+        internal__static_protobuf_unittest_FooServerMessage__Descriptor = Descriptor.MessageTypes[30];
+        internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.FooServerMessage>(internal__static_protobuf_unittest_FooServerMessage__Descriptor,
+                new string[] { });
+        internal__static_protobuf_unittest_BarRequest__Descriptor = Descriptor.MessageTypes[31];
+        internal__static_protobuf_unittest_BarRequest__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BarRequest>(internal__static_protobuf_unittest_BarRequest__Descriptor,
+                new string[] { });
+        internal__static_protobuf_unittest_BarResponse__Descriptor = Descriptor.MessageTypes[32];
+        internal__static_protobuf_unittest_BarResponse__FieldAccessorTable = 
+            new pb::FieldAccess.FieldAccessorTable<global::Google.Protobuf.TestProtos.BarResponse>(internal__static_protobuf_unittest_BarResponse__Descriptor,
+                new string[] { });
+      };
+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+          new pbd::FileDescriptor[] {
+          global::Google.Protobuf.TestProtos.UnittestImportProto3.Descriptor, 
+          }, assigner);
+    }
+    #endregion
+
+  }
+  #region Enums
+  public enum ForeignEnum : long {
+    FOREIGN_UNSPECIFIED = 0,
+    FOREIGN_FOO = 4,
+    FOREIGN_BAR = 5,
+    FOREIGN_BAZ = 6,
+  }
+
+  public enum TestEnumWithDupValue : long {
+    TEST_ENUM_WITH_DUP_VALUE_UNSPECIFIED = 0,
+    FOO1 = 1,
+    BAR1 = 2,
+    BAZ = 3,
+    FOO2 = 1,
+    BAR2 = 2,
+  }
+
+  public enum TestSparseEnum : long {
+    TEST_SPARSE_ENUM_UNSPECIFIED = 0,
+    SPARSE_A = 123,
+    SPARSE_B = 62374,
+    SPARSE_C = 12589234,
+    SPARSE_D = -15,
+    SPARSE_E = -53452,
+    SPARSE_G = 2,
+  }
+
+  #endregion
+
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestAllTypes : pb::IMessage<TestAllTypes>, global::System.IEquatable<TestAllTypes> {
+    private static readonly pb::MessageParser<TestAllTypes> _parser = new pb::MessageParser<TestAllTypes>(() => new TestAllTypes());
+    public static pb::MessageParser<TestAllTypes> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "oneof_bytes", "oneof_nested_message", "oneof_string", "oneof_uint32", "repeated_bool", "repeated_bytes", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_import_enum", "repeated_import_message", "repeated_int32", "repeated_int64", "repeated_nested_enum", "repeated_nested_message", "repeated_public_import_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_uint32", "repeated_uint64", "single_bool", "single_bytes", "single_double", "single_fixed32", "single_fixed64", "single_float", "single_foreign_enum", "single_foreign_message", "single_import_enum", "single_import_message", "single_int32", "single_int64", "single_nested_enum", "single_nested_message", "single_public_import_message", "single_sfixed32", "single_sfixed64", "single_sint32", "single_sint64", "single_string", "single_uint32", "single_uint64" };
+    private static readonly uint[] _fieldTags = new uint[] { 914, 898, 906, 888, 344, 362, 337, 301, 305, 333, 416, 394, 424, 402, 248, 256, 408, 386, 434, 317, 321, 280, 288, 354, 264, 272, 104, 122, 97, 61, 65, 93, 176, 154, 184, 162, 8, 16, 168, 146, 210, 77, 81, 40, 48, 114, 24, 32 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestAllTypes__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestAllTypes> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable; }
+    }
+
+    public TestAllTypes() { }
+    public TestAllTypes(TestAllTypes other) {
+      MergeFrom(other);
+    }
+    public const int SingleInt32FieldNumber = 1;
+    private int singleInt32_;
+    public int SingleInt32 {
+      get { return singleInt32_; }
+      set { singleInt32_ = value; }
+    }
+
+
+    public const int SingleInt64FieldNumber = 2;
+    private long singleInt64_;
+    public long SingleInt64 {
+      get { return singleInt64_; }
+      set { singleInt64_ = value; }
+    }
+
+
+    public const int SingleUint32FieldNumber = 3;
+    private uint singleUint32_;
+    public uint SingleUint32 {
+      get { return singleUint32_; }
+      set { singleUint32_ = value; }
+    }
+
+
+    public const int SingleUint64FieldNumber = 4;
+    private ulong singleUint64_;
+    public ulong SingleUint64 {
+      get { return singleUint64_; }
+      set { singleUint64_ = value; }
+    }
+
+
+    public const int SingleSint32FieldNumber = 5;
+    private int singleSint32_;
+    public int SingleSint32 {
+      get { return singleSint32_; }
+      set { singleSint32_ = value; }
+    }
+
+
+    public const int SingleSint64FieldNumber = 6;
+    private long singleSint64_;
+    public long SingleSint64 {
+      get { return singleSint64_; }
+      set { singleSint64_ = value; }
+    }
+
+
+    public const int SingleFixed32FieldNumber = 7;
+    private uint singleFixed32_;
+    public uint SingleFixed32 {
+      get { return singleFixed32_; }
+      set { singleFixed32_ = value; }
+    }
+
+
+    public const int SingleFixed64FieldNumber = 8;
+    private ulong singleFixed64_;
+    public ulong SingleFixed64 {
+      get { return singleFixed64_; }
+      set { singleFixed64_ = value; }
+    }
+
+
+    public const int SingleSfixed32FieldNumber = 9;
+    private int singleSfixed32_;
+    public int SingleSfixed32 {
+      get { return singleSfixed32_; }
+      set { singleSfixed32_ = value; }
+    }
+
+
+    public const int SingleSfixed64FieldNumber = 10;
+    private long singleSfixed64_;
+    public long SingleSfixed64 {
+      get { return singleSfixed64_; }
+      set { singleSfixed64_ = value; }
+    }
+
+
+    public const int SingleFloatFieldNumber = 11;
+    private float singleFloat_;
+    public float SingleFloat {
+      get { return singleFloat_; }
+      set { singleFloat_ = value; }
+    }
+
+
+    public const int SingleDoubleFieldNumber = 12;
+    private double singleDouble_;
+    public double SingleDouble {
+      get { return singleDouble_; }
+      set { singleDouble_ = value; }
+    }
+
+
+    public const int SingleBoolFieldNumber = 13;
+    private bool singleBool_;
+    public bool SingleBool {
+      get { return singleBool_; }
+      set { singleBool_ = value; }
+    }
+
+
+    public const int SingleStringFieldNumber = 14;
+    private string singleString_ = "";
+    public string SingleString {
+      get { return singleString_; }
+      set { singleString_ = value ?? ""; }
+    }
+
+
+    public const int SingleBytesFieldNumber = 15;
+    private pb::ByteString singleBytes_ = pb::ByteString.Empty;
+    public pb::ByteString SingleBytes {
+      get { return singleBytes_; }
+      set { singleBytes_ = value ?? pb::ByteString.Empty; }
+    }
+
+
+    public const int SingleNestedMessageFieldNumber = 18;
+    private global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage singleNestedMessage_;
+    public global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage SingleNestedMessage {
+      get { return singleNestedMessage_; }
+      set { singleNestedMessage_ = value; }
+    }
+
+    public const int SingleForeignMessageFieldNumber = 19;
+    private global::Google.Protobuf.TestProtos.ForeignMessage singleForeignMessage_;
+    public global::Google.Protobuf.TestProtos.ForeignMessage SingleForeignMessage {
+      get { return singleForeignMessage_; }
+      set { singleForeignMessage_ = value; }
+    }
+
+    public const int SingleImportMessageFieldNumber = 20;
+    private global::Google.Protobuf.TestProtos.ImportMessage singleImportMessage_;
+    public global::Google.Protobuf.TestProtos.ImportMessage SingleImportMessage {
+      get { return singleImportMessage_; }
+      set { singleImportMessage_ = value; }
+    }
+
+    public const int SingleNestedEnumFieldNumber = 21;
+    private global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum singleNestedEnum_ = global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED;
+    public global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum SingleNestedEnum {
+      get { return singleNestedEnum_; }
+      set { singleNestedEnum_ = value; }
+    }
+
+
+    public const int SingleForeignEnumFieldNumber = 22;
+    private global::Google.Protobuf.TestProtos.ForeignEnum singleForeignEnum_ = global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED;
+    public global::Google.Protobuf.TestProtos.ForeignEnum SingleForeignEnum {
+      get { return singleForeignEnum_; }
+      set { singleForeignEnum_ = value; }
+    }
+
+
+    public const int SingleImportEnumFieldNumber = 23;
+    private global::Google.Protobuf.TestProtos.ImportEnum singleImportEnum_ = global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED;
+    public global::Google.Protobuf.TestProtos.ImportEnum SingleImportEnum {
+      get { return singleImportEnum_; }
+      set { singleImportEnum_ = value; }
+    }
+
+
+    public const int SinglePublicImportMessageFieldNumber = 26;
+    private global::Google.Protobuf.TestProtos.PublicImportMessage singlePublicImportMessage_;
+    public global::Google.Protobuf.TestProtos.PublicImportMessage SinglePublicImportMessage {
+      get { return singlePublicImportMessage_; }
+      set { singlePublicImportMessage_ = value; }
+    }
+
+    public const int RepeatedInt32FieldNumber = 31;
+    private readonly pbc::RepeatedField<int> repeatedInt32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> RepeatedInt32 {
+      get { return repeatedInt32_; }
+    }
+
+    public const int RepeatedInt64FieldNumber = 32;
+    private readonly pbc::RepeatedField<long> repeatedInt64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> RepeatedInt64 {
+      get { return repeatedInt64_; }
+    }
+
+    public const int RepeatedUint32FieldNumber = 33;
+    private readonly pbc::RepeatedField<uint> repeatedUint32_ = new pbc::RepeatedField<uint>();
+    public pbc::RepeatedField<uint> RepeatedUint32 {
+      get { return repeatedUint32_; }
+    }
+
+    public const int RepeatedUint64FieldNumber = 34;
+    private readonly pbc::RepeatedField<ulong> repeatedUint64_ = new pbc::RepeatedField<ulong>();
+    public pbc::RepeatedField<ulong> RepeatedUint64 {
+      get { return repeatedUint64_; }
+    }
+
+    public const int RepeatedSint32FieldNumber = 35;
+    private readonly pbc::RepeatedField<int> repeatedSint32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> RepeatedSint32 {
+      get { return repeatedSint32_; }
+    }
+
+    public const int RepeatedSint64FieldNumber = 36;
+    private readonly pbc::RepeatedField<long> repeatedSint64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> RepeatedSint64 {
+      get { return repeatedSint64_; }
+    }
+
+    public const int RepeatedFixed32FieldNumber = 37;
+    private readonly pbc::RepeatedField<uint> repeatedFixed32_ = new pbc::RepeatedField<uint>();
+    public pbc::RepeatedField<uint> RepeatedFixed32 {
+      get { return repeatedFixed32_; }
+    }
+
+    public const int RepeatedFixed64FieldNumber = 38;
+    private readonly pbc::RepeatedField<ulong> repeatedFixed64_ = new pbc::RepeatedField<ulong>();
+    public pbc::RepeatedField<ulong> RepeatedFixed64 {
+      get { return repeatedFixed64_; }
+    }
+
+    public const int RepeatedSfixed32FieldNumber = 39;
+    private readonly pbc::RepeatedField<int> repeatedSfixed32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> RepeatedSfixed32 {
+      get { return repeatedSfixed32_; }
+    }
+
+    public const int RepeatedSfixed64FieldNumber = 40;
+    private readonly pbc::RepeatedField<long> repeatedSfixed64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> RepeatedSfixed64 {
+      get { return repeatedSfixed64_; }
+    }
+
+    public const int RepeatedFloatFieldNumber = 41;
+    private readonly pbc::RepeatedField<float> repeatedFloat_ = new pbc::RepeatedField<float>();
+    public pbc::RepeatedField<float> RepeatedFloat {
+      get { return repeatedFloat_; }
+    }
+
+    public const int RepeatedDoubleFieldNumber = 42;
+    private readonly pbc::RepeatedField<double> repeatedDouble_ = new pbc::RepeatedField<double>();
+    public pbc::RepeatedField<double> RepeatedDouble {
+      get { return repeatedDouble_; }
+    }
+
+    public const int RepeatedBoolFieldNumber = 43;
+    private readonly pbc::RepeatedField<bool> repeatedBool_ = new pbc::RepeatedField<bool>();
+    public pbc::RepeatedField<bool> RepeatedBool {
+      get { return repeatedBool_; }
+    }
+
+    public const int RepeatedStringFieldNumber = 44;
+    private readonly pbc::RepeatedField<string> repeatedString_ = new pbc::RepeatedField<string>();
+    public pbc::RepeatedField<string> RepeatedString {
+      get { return repeatedString_; }
+    }
+
+    public const int RepeatedBytesFieldNumber = 45;
+    private readonly pbc::RepeatedField<pb::ByteString> repeatedBytes_ = new pbc::RepeatedField<pb::ByteString>();
+    public pbc::RepeatedField<pb::ByteString> RepeatedBytes {
+      get { return repeatedBytes_; }
+    }
+
+    public const int RepeatedNestedMessageFieldNumber = 48;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage> repeatedNestedMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessage {
+      get { return repeatedNestedMessage_; }
+    }
+
+    public const int RepeatedForeignMessageFieldNumber = 49;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage> repeatedForeignMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage> RepeatedForeignMessage {
+      get { return repeatedForeignMessage_; }
+    }
+
+    public const int RepeatedImportMessageFieldNumber = 50;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportMessage> repeatedImportMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportMessage>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportMessage> RepeatedImportMessage {
+      get { return repeatedImportMessage_; }
+    }
+
+    public const int RepeatedNestedEnumFieldNumber = 51;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum> repeatedNestedEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnum {
+      get { return repeatedNestedEnum_; }
+    }
+
+    public const int RepeatedForeignEnumFieldNumber = 52;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> repeatedForeignEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> RepeatedForeignEnum {
+      get { return repeatedForeignEnum_; }
+    }
+
+    public const int RepeatedImportEnumFieldNumber = 53;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportEnum> repeatedImportEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportEnum>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ImportEnum> RepeatedImportEnum {
+      get { return repeatedImportEnum_; }
+    }
+
+    public const int RepeatedPublicImportMessageFieldNumber = 54;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage> repeatedPublicImportMessage_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.PublicImportMessage> RepeatedPublicImportMessage {
+      get { return repeatedPublicImportMessage_; }
+    }
+
+    public const int OneofUint32FieldNumber = 111;
+    public uint OneofUint32 {
+      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofUint32 ? (uint) oneofField_ : 0; }
+      set {
+        oneofField_ = value;
+        oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
+      }
+    }
+
+    public const int OneofNestedMessageFieldNumber = 112;
+    public global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage OneofNestedMessage {
+      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage ? (global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage) oneofField_ : null; }
+      set {
+        oneofField_ = value;
+        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.OneofNestedMessage;
+      }
+    }
+
+    public const int OneofStringFieldNumber = 113;
+    public string OneofString {
+      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofString ? (string) oneofField_ : ""; }
+      set {
+        oneofField_ = value ?? "";
+        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.OneofString;
+      }
+    }
+
+    public const int OneofBytesFieldNumber = 114;
+    public pb::ByteString OneofBytes {
+      get { return oneofFieldCase_ == OneofFieldOneofCase.OneofBytes ? (pb::ByteString) oneofField_ : pb::ByteString.Empty; }
+      set {
+        oneofField_ = value ?? pb::ByteString.Empty;
+        oneofFieldCase_ = value == null ? OneofFieldOneofCase.None : OneofFieldOneofCase.OneofBytes;
+      }
+    }
+
+    private object oneofField_;
+    public enum OneofFieldOneofCase {
+      None = 0,
+      OneofUint32 = 111,
+      OneofNestedMessage = 112,
+      OneofString = 113,
+      OneofBytes = 114,
+    }
+    private OneofFieldOneofCase oneofFieldCase_ = OneofFieldOneofCase.None;
+    public OneofFieldOneofCase OneofFieldCase {
+      get { return oneofFieldCase_; }
+    }
+
+    public void ClearOneofField() {
+      oneofFieldCase_ = OneofFieldOneofCase.None;
+      oneofField_ = null;
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestAllTypes);
+    }
+
+    public bool Equals(TestAllTypes other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (SingleInt32 != other.SingleInt32) return false;
+      if (SingleInt64 != other.SingleInt64) return false;
+      if (SingleUint32 != other.SingleUint32) return false;
+      if (SingleUint64 != other.SingleUint64) return false;
+      if (SingleSint32 != other.SingleSint32) return false;
+      if (SingleSint64 != other.SingleSint64) return false;
+      if (SingleFixed32 != other.SingleFixed32) return false;
+      if (SingleFixed64 != other.SingleFixed64) return false;
+      if (SingleSfixed32 != other.SingleSfixed32) return false;
+      if (SingleSfixed64 != other.SingleSfixed64) return false;
+      if (SingleFloat != other.SingleFloat) return false;
+      if (SingleDouble != other.SingleDouble) return false;
+      if (SingleBool != other.SingleBool) return false;
+      if (SingleString != other.SingleString) return false;
+      if (SingleBytes != other.SingleBytes) return false;
+      if (!object.Equals(SingleNestedMessage, other.SingleNestedMessage)) return false;if (!object.Equals(SingleForeignMessage, other.SingleForeignMessage)) return false;if (!object.Equals(SingleImportMessage, other.SingleImportMessage)) return false;if (SingleNestedEnum != other.SingleNestedEnum) return false;
+      if (SingleForeignEnum != other.SingleForeignEnum) return false;
+      if (SingleImportEnum != other.SingleImportEnum) return false;
+      if (!object.Equals(SinglePublicImportMessage, other.SinglePublicImportMessage)) return false;if(!repeatedInt32_.Equals(other.repeatedInt32_)) return false;
+      if(!repeatedInt64_.Equals(other.repeatedInt64_)) return false;
+      if(!repeatedUint32_.Equals(other.repeatedUint32_)) return false;
+      if(!repeatedUint64_.Equals(other.repeatedUint64_)) return false;
+      if(!repeatedSint32_.Equals(other.repeatedSint32_)) return false;
+      if(!repeatedSint64_.Equals(other.repeatedSint64_)) return false;
+      if(!repeatedFixed32_.Equals(other.repeatedFixed32_)) return false;
+      if(!repeatedFixed64_.Equals(other.repeatedFixed64_)) return false;
+      if(!repeatedSfixed32_.Equals(other.repeatedSfixed32_)) return false;
+      if(!repeatedSfixed64_.Equals(other.repeatedSfixed64_)) return false;
+      if(!repeatedFloat_.Equals(other.repeatedFloat_)) return false;
+      if(!repeatedDouble_.Equals(other.repeatedDouble_)) return false;
+      if(!repeatedBool_.Equals(other.repeatedBool_)) return false;
+      if(!repeatedString_.Equals(other.repeatedString_)) return false;
+      if(!repeatedBytes_.Equals(other.repeatedBytes_)) return false;
+      if(!repeatedNestedMessage_.Equals(other.repeatedNestedMessage_)) return false;
+      if(!repeatedForeignMessage_.Equals(other.repeatedForeignMessage_)) return false;
+      if(!repeatedImportMessage_.Equals(other.repeatedImportMessage_)) return false;
+      if(!repeatedNestedEnum_.Equals(other.repeatedNestedEnum_)) return false;
+      if(!repeatedForeignEnum_.Equals(other.repeatedForeignEnum_)) return false;
+      if(!repeatedImportEnum_.Equals(other.repeatedImportEnum_)) return false;
+      if(!repeatedPublicImportMessage_.Equals(other.repeatedPublicImportMessage_)) return false;
+      if (OneofUint32 != other.OneofUint32) return false;
+      if (!object.Equals(OneofNestedMessage, other.OneofNestedMessage)) return false;if (OneofString != other.OneofString) return false;
+      if (OneofBytes != other.OneofBytes) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (SingleInt32 != 0) hash ^= SingleInt32.GetHashCode();
+      if (SingleInt64 != 0L) hash ^= SingleInt64.GetHashCode();
+      if (SingleUint32 != 0) hash ^= SingleUint32.GetHashCode();
+      if (SingleUint64 != 0UL) hash ^= SingleUint64.GetHashCode();
+      if (SingleSint32 != 0) hash ^= SingleSint32.GetHashCode();
+      if (SingleSint64 != 0L) hash ^= SingleSint64.GetHashCode();
+      if (SingleFixed32 != 0) hash ^= SingleFixed32.GetHashCode();
+      if (SingleFixed64 != 0UL) hash ^= SingleFixed64.GetHashCode();
+      if (SingleSfixed32 != 0) hash ^= SingleSfixed32.GetHashCode();
+      if (SingleSfixed64 != 0L) hash ^= SingleSfixed64.GetHashCode();
+      if (SingleFloat != 0F) hash ^= SingleFloat.GetHashCode();
+      if (SingleDouble != 0D) hash ^= SingleDouble.GetHashCode();
+      if (SingleBool != false) hash ^= SingleBool.GetHashCode();
+      if (SingleString != "") hash ^= SingleString.GetHashCode();
+      if (SingleBytes != pb::ByteString.Empty) hash ^= SingleBytes.GetHashCode();
+      if (singleNestedMessage_ != null) hash ^= SingleNestedMessage.GetHashCode();
+      if (singleForeignMessage_ != null) hash ^= SingleForeignMessage.GetHashCode();
+      if (singleImportMessage_ != null) hash ^= SingleImportMessage.GetHashCode();
+      if (SingleNestedEnum != global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED) hash ^= SingleNestedEnum.GetHashCode();
+      if (SingleForeignEnum != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) hash ^= SingleForeignEnum.GetHashCode();
+      if (SingleImportEnum != global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED) hash ^= SingleImportEnum.GetHashCode();
+      if (singlePublicImportMessage_ != null) hash ^= SinglePublicImportMessage.GetHashCode();
+      hash ^= repeatedInt32_.GetHashCode();
+      hash ^= repeatedInt64_.GetHashCode();
+      hash ^= repeatedUint32_.GetHashCode();
+      hash ^= repeatedUint64_.GetHashCode();
+      hash ^= repeatedSint32_.GetHashCode();
+      hash ^= repeatedSint64_.GetHashCode();
+      hash ^= repeatedFixed32_.GetHashCode();
+      hash ^= repeatedFixed64_.GetHashCode();
+      hash ^= repeatedSfixed32_.GetHashCode();
+      hash ^= repeatedSfixed64_.GetHashCode();
+      hash ^= repeatedFloat_.GetHashCode();
+      hash ^= repeatedDouble_.GetHashCode();
+      hash ^= repeatedBool_.GetHashCode();
+      hash ^= repeatedString_.GetHashCode();
+      hash ^= repeatedBytes_.GetHashCode();
+      hash ^= repeatedNestedMessage_.GetHashCode();
+      hash ^= repeatedForeignMessage_.GetHashCode();
+      hash ^= repeatedImportMessage_.GetHashCode();
+      hash ^= repeatedNestedEnum_.GetHashCode();
+      hash ^= repeatedForeignEnum_.GetHashCode();
+      hash ^= repeatedImportEnum_.GetHashCode();
+      hash ^= repeatedPublicImportMessage_.GetHashCode();
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) hash ^= OneofUint32.GetHashCode();
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) hash ^= OneofNestedMessage.GetHashCode();
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) hash ^= OneofString.GetHashCode();
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) hash ^= OneofBytes.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (SingleInt32 != 0) {
+        output.WriteInt32(1, fieldNames[36], SingleInt32);
+      }
+      if (SingleInt64 != 0L) {
+        output.WriteInt64(2, fieldNames[37], SingleInt64);
+      }
+      if (SingleUint32 != 0) {
+        output.WriteUInt32(3, fieldNames[46], SingleUint32);
+      }
+      if (SingleUint64 != 0UL) {
+        output.WriteUInt64(4, fieldNames[47], SingleUint64);
+      }
+      if (SingleSint32 != 0) {
+        output.WriteSInt32(5, fieldNames[43], SingleSint32);
+      }
+      if (SingleSint64 != 0L) {
+        output.WriteSInt64(6, fieldNames[44], SingleSint64);
+      }
+      if (SingleFixed32 != 0) {
+        output.WriteFixed32(7, fieldNames[29], SingleFixed32);
+      }
+      if (SingleFixed64 != 0UL) {
+        output.WriteFixed64(8, fieldNames[30], SingleFixed64);
+      }
+      if (SingleSfixed32 != 0) {
+        output.WriteSFixed32(9, fieldNames[41], SingleSfixed32);
+      }
+      if (SingleSfixed64 != 0L) {
+        output.WriteSFixed64(10, fieldNames[42], SingleSfixed64);
+      }
+      if (SingleFloat != 0F) {
+        output.WriteFloat(11, fieldNames[31], SingleFloat);
+      }
+      if (SingleDouble != 0D) {
+        output.WriteDouble(12, fieldNames[28], SingleDouble);
+      }
+      if (SingleBool != false) {
+        output.WriteBool(13, fieldNames[26], SingleBool);
+      }
+      if (SingleString != "") {
+        output.WriteString(14, fieldNames[45], SingleString);
+      }
+      if (SingleBytes != pb::ByteString.Empty) {
+        output.WriteBytes(15, fieldNames[27], SingleBytes);
+      }
+      if (singleNestedMessage_ != null) {
+        output.WriteMessage(18, fieldNames[39], SingleNestedMessage);
+      }
+      if (singleForeignMessage_ != null) {
+        output.WriteMessage(19, fieldNames[33], SingleForeignMessage);
+      }
+      if (singleImportMessage_ != null) {
+        output.WriteMessage(20, fieldNames[35], SingleImportMessage);
+      }
+      if (SingleNestedEnum != global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED) {
+        output.WriteEnum(21, fieldNames[38], SingleNestedEnum);
+      }
+      if (SingleForeignEnum != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
+        output.WriteEnum(22, fieldNames[32], SingleForeignEnum);
+      }
+      if (SingleImportEnum != global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED) {
+        output.WriteEnum(23, fieldNames[34], SingleImportEnum);
+      }
+      if (singlePublicImportMessage_ != null) {
+        output.WriteMessage(26, fieldNames[40], SinglePublicImportMessage);
+      }
+      output.WritePackedInt32Array(31, fieldNames[14], repeatedInt32_);
+      output.WritePackedInt64Array(32, fieldNames[15], repeatedInt64_);
+      output.WritePackedUInt32Array(33, fieldNames[24], repeatedUint32_);
+      output.WritePackedUInt64Array(34, fieldNames[25], repeatedUint64_);
+      output.WritePackedSInt32Array(35, fieldNames[21], repeatedSint32_);
+      output.WritePackedSInt64Array(36, fieldNames[22], repeatedSint64_);
+      output.WritePackedFixed32Array(37, fieldNames[7], repeatedFixed32_);
+      output.WritePackedFixed64Array(38, fieldNames[8], repeatedFixed64_);
+      output.WritePackedSFixed32Array(39, fieldNames[19], repeatedSfixed32_);
+      output.WritePackedSFixed64Array(40, fieldNames[20], repeatedSfixed64_);
+      output.WritePackedFloatArray(41, fieldNames[9], repeatedFloat_);
+      output.WritePackedDoubleArray(42, fieldNames[6], repeatedDouble_);
+      output.WritePackedBoolArray(43, fieldNames[4], repeatedBool_);
+      output.WriteStringArray(44, fieldNames[23], repeatedString_);
+      output.WriteBytesArray(45, fieldNames[5], repeatedBytes_);
+      output.WriteMessageArray(48, fieldNames[17], repeatedNestedMessage_);
+      output.WriteMessageArray(49, fieldNames[11], repeatedForeignMessage_);
+      output.WriteMessageArray(50, fieldNames[13], repeatedImportMessage_);
+      output.WritePackedEnumArray(51, fieldNames[16], repeatedNestedEnum_);
+      output.WritePackedEnumArray(52, fieldNames[10], repeatedForeignEnum_);
+      output.WritePackedEnumArray(53, fieldNames[12], repeatedImportEnum_);
+      output.WriteMessageArray(54, fieldNames[18], repeatedPublicImportMessage_);
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
+        output.WriteUInt32(111, fieldNames[3], OneofUint32);
+      }
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
+        output.WriteMessage(112, fieldNames[1], OneofNestedMessage);
+      }
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
+        output.WriteString(113, fieldNames[2], OneofString);
+      }
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
+        output.WriteBytes(114, fieldNames[0], OneofBytes);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (SingleInt32 != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, SingleInt32);
+      }
+      if (SingleInt64 != 0L) {
+        size += pb::CodedOutputStream.ComputeInt64Size(2, SingleInt64);
+      }
+      if (SingleUint32 != 0) {
+        size += pb::CodedOutputStream.ComputeUInt32Size(3, SingleUint32);
+      }
+      if (SingleUint64 != 0UL) {
+        size += pb::CodedOutputStream.ComputeUInt64Size(4, SingleUint64);
+      }
+      if (SingleSint32 != 0) {
+        size += pb::CodedOutputStream.ComputeSInt32Size(5, SingleSint32);
+      }
+      if (SingleSint64 != 0L) {
+        size += pb::CodedOutputStream.ComputeSInt64Size(6, SingleSint64);
+      }
+      if (SingleFixed32 != 0) {
+        size += pb::CodedOutputStream.ComputeFixed32Size(7, SingleFixed32);
+      }
+      if (SingleFixed64 != 0UL) {
+        size += pb::CodedOutputStream.ComputeFixed64Size(8, SingleFixed64);
+      }
+      if (SingleSfixed32 != 0) {
+        size += pb::CodedOutputStream.ComputeSFixed32Size(9, SingleSfixed32);
+      }
+      if (SingleSfixed64 != 0L) {
+        size += pb::CodedOutputStream.ComputeSFixed64Size(10, SingleSfixed64);
+      }
+      if (SingleFloat != 0F) {
+        size += pb::CodedOutputStream.ComputeFloatSize(11, SingleFloat);
+      }
+      if (SingleDouble != 0D) {
+        size += pb::CodedOutputStream.ComputeDoubleSize(12, SingleDouble);
+      }
+      if (SingleBool != false) {
+        size += pb::CodedOutputStream.ComputeBoolSize(13, SingleBool);
+      }
+      if (SingleString != "") {
+        size += pb::CodedOutputStream.ComputeStringSize(14, SingleString);
+      }
+      if (SingleBytes != pb::ByteString.Empty) {
+        size += pb::CodedOutputStream.ComputeBytesSize(15, SingleBytes);
+      }
+      if (singleNestedMessage_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(18, SingleNestedMessage);
+      }
+      if (singleForeignMessage_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(19, SingleForeignMessage);
+      }
+      if (singleImportMessage_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(20, SingleImportMessage);
+      }
+      if (SingleNestedEnum != global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED) {
+        size += pb::CodedOutputStream.ComputeEnumSize(21, SingleNestedEnum);
+      }
+      if (SingleForeignEnum != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
+        size += pb::CodedOutputStream.ComputeEnumSize(22, SingleForeignEnum);
+      }
+      if (SingleImportEnum != global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED) {
+        size += pb::CodedOutputStream.ComputeEnumSize(23, SingleImportEnum);
+      }
+      if (singlePublicImportMessage_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(26, SinglePublicImportMessage);
+      }
+      {
+        int dataSize = 0;
+        foreach (int element in repeatedInt32_) {
+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedInt32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (long element in repeatedInt64_) {
+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedInt64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (uint element in repeatedUint32_) {
+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedUint32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (ulong element in repeatedUint64_) {
+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedUint64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (int element in repeatedSint32_) {
+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedSint32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (long element in repeatedSint64_) {
+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedSint64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * repeatedFixed32_.Count;
+        size += dataSize;
+        if (repeatedFixed32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * repeatedFixed64_.Count;
+        size += dataSize;
+        if (repeatedFixed64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * repeatedSfixed32_.Count;
+        size += dataSize;
+        if (repeatedSfixed32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * repeatedSfixed64_.Count;
+        size += dataSize;
+        if (repeatedSfixed64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * repeatedFloat_.Count;
+        size += dataSize;
+        if (repeatedFloat_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * repeatedDouble_.Count;
+        size += dataSize;
+        if (repeatedDouble_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 1 * repeatedBool_.Count;
+        size += dataSize;
+        if (repeatedBool_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (string element in repeatedString_) {
+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
+        }
+        size += dataSize;
+        size += 2 * repeatedString_.Count;
+      }
+      {
+        int dataSize = 0;
+        foreach (pb::ByteString element in repeatedBytes_) {
+          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);
+        }
+        size += dataSize;
+        size += 2 * repeatedBytes_.Count;
+      }
+      foreach (global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage element in repeatedNestedMessage_) {
+        size += pb::CodedOutputStream.ComputeMessageSize(48, element);
+      }
+      foreach (global::Google.Protobuf.TestProtos.ForeignMessage element in repeatedForeignMessage_) {
+        size += pb::CodedOutputStream.ComputeMessageSize(49, element);
+      }
+      foreach (global::Google.Protobuf.TestProtos.ImportMessage element in repeatedImportMessage_) {
+        size += pb::CodedOutputStream.ComputeMessageSize(50, element);
+      }
+      {
+        int dataSize = 0;
+        if (repeatedNestedEnum_.Count > 0) {
+          foreach (global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum element in repeatedNestedEnum_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2;
+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        if (repeatedForeignEnum_.Count > 0) {
+          foreach (global::Google.Protobuf.TestProtos.ForeignEnum element in repeatedForeignEnum_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2;
+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        if (repeatedImportEnum_.Count > 0) {
+          foreach (global::Google.Protobuf.TestProtos.ImportEnum element in repeatedImportEnum_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2;
+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
+        }
+      }
+      foreach (global::Google.Protobuf.TestProtos.PublicImportMessage element in repeatedPublicImportMessage_) {
+        size += pb::CodedOutputStream.ComputeMessageSize(54, element);
+      }
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofUint32) {
+        size += pb::CodedOutputStream.ComputeUInt32Size(111, OneofUint32);
+      }
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
+        size += pb::CodedOutputStream.ComputeMessageSize(112, OneofNestedMessage);
+      }
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofString) {
+        size += pb::CodedOutputStream.ComputeStringSize(113, OneofString);
+      }
+      if (oneofFieldCase_ == OneofFieldOneofCase.OneofBytes) {
+        size += pb::CodedOutputStream.ComputeBytesSize(114, OneofBytes);
+      }
+      return size;
+    }
+    public void MergeFrom(TestAllTypes other) {
+      if (other == null) {
+        return;
+      }
+      if (other.SingleInt32 != 0) {
+        SingleInt32 = other.SingleInt32;
+      }
+      if (other.SingleInt64 != 0L) {
+        SingleInt64 = other.SingleInt64;
+      }
+      if (other.SingleUint32 != 0) {
+        SingleUint32 = other.SingleUint32;
+      }
+      if (other.SingleUint64 != 0UL) {
+        SingleUint64 = other.SingleUint64;
+      }
+      if (other.SingleSint32 != 0) {
+        SingleSint32 = other.SingleSint32;
+      }
+      if (other.SingleSint64 != 0L) {
+        SingleSint64 = other.SingleSint64;
+      }
+      if (other.SingleFixed32 != 0) {
+        SingleFixed32 = other.SingleFixed32;
+      }
+      if (other.SingleFixed64 != 0UL) {
+        SingleFixed64 = other.SingleFixed64;
+      }
+      if (other.SingleSfixed32 != 0) {
+        SingleSfixed32 = other.SingleSfixed32;
+      }
+      if (other.SingleSfixed64 != 0L) {
+        SingleSfixed64 = other.SingleSfixed64;
+      }
+      if (other.SingleFloat != 0F) {
+        SingleFloat = other.SingleFloat;
+      }
+      if (other.SingleDouble != 0D) {
+        SingleDouble = other.SingleDouble;
+      }
+      if (other.SingleBool != false) {
+        SingleBool = other.SingleBool;
+      }
+      if (other.SingleString != "") {
+        SingleString = other.SingleString;
+      }
+      if (other.SingleBytes != pb::ByteString.Empty) {
+        SingleBytes = other.SingleBytes;
+      }
+      if (other.singleNestedMessage_ != null) {
+        if (singleNestedMessage_ == null) {
+          singleNestedMessage_ = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
+        }
+        SingleNestedMessage.MergeFrom(other.SingleNestedMessage);
+      }
+      if (other.singleForeignMessage_ != null) {
+        if (singleForeignMessage_ == null) {
+          singleForeignMessage_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
+        }
+        SingleForeignMessage.MergeFrom(other.SingleForeignMessage);
+      }
+      if (other.singleImportMessage_ != null) {
+        if (singleImportMessage_ == null) {
+          singleImportMessage_ = new global::Google.Protobuf.TestProtos.ImportMessage();
+        }
+        SingleImportMessage.MergeFrom(other.SingleImportMessage);
+      }
+      if (other.SingleNestedEnum != global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum.NESTED_ENUM_UNSPECIFIED) {
+        SingleNestedEnum = other.SingleNestedEnum;
+      }
+      if (other.SingleForeignEnum != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
+        SingleForeignEnum = other.SingleForeignEnum;
+      }
+      if (other.SingleImportEnum != global::Google.Protobuf.TestProtos.ImportEnum.IMPORT_ENUM_UNSPECIFIED) {
+        SingleImportEnum = other.SingleImportEnum;
+      }
+      if (other.singlePublicImportMessage_ != null) {
+        if (singlePublicImportMessage_ == null) {
+          singlePublicImportMessage_ = new global::Google.Protobuf.TestProtos.PublicImportMessage();
+        }
+        SinglePublicImportMessage.MergeFrom(other.SinglePublicImportMessage);
+      }
+      repeatedInt32_.Add(other.repeatedInt32_);
+      repeatedInt64_.Add(other.repeatedInt64_);
+      repeatedUint32_.Add(other.repeatedUint32_);
+      repeatedUint64_.Add(other.repeatedUint64_);
+      repeatedSint32_.Add(other.repeatedSint32_);
+      repeatedSint64_.Add(other.repeatedSint64_);
+      repeatedFixed32_.Add(other.repeatedFixed32_);
+      repeatedFixed64_.Add(other.repeatedFixed64_);
+      repeatedSfixed32_.Add(other.repeatedSfixed32_);
+      repeatedSfixed64_.Add(other.repeatedSfixed64_);
+      repeatedFloat_.Add(other.repeatedFloat_);
+      repeatedDouble_.Add(other.repeatedDouble_);
+      repeatedBool_.Add(other.repeatedBool_);
+      repeatedString_.Add(other.repeatedString_);
+      repeatedBytes_.Add(other.repeatedBytes_);
+      repeatedNestedMessage_.Add(other.repeatedNestedMessage_);
+      repeatedForeignMessage_.Add(other.repeatedForeignMessage_);
+      repeatedImportMessage_.Add(other.repeatedImportMessage_);
+      repeatedNestedEnum_.Add(other.repeatedNestedEnum_);
+      repeatedForeignEnum_.Add(other.repeatedForeignEnum_);
+      repeatedImportEnum_.Add(other.repeatedImportEnum_);
+      repeatedPublicImportMessage_.Add(other.repeatedPublicImportMessage_);
+      switch (other.OneofFieldCase) {
+        case OneofFieldOneofCase.OneofUint32:
+          OneofUint32 = other.OneofUint32;
+          break;
+        case OneofFieldOneofCase.OneofNestedMessage:
+          OneofNestedMessage = other.OneofNestedMessage;
+          break;
+        case OneofFieldOneofCase.OneofString:
+          OneofString = other.OneofString;
+          break;
+        case OneofFieldOneofCase.OneofBytes:
+          OneofBytes = other.OneofBytes;
+          break;
+      }
+
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref singleInt32_);
+            break;
+          }
+          case 16: {
+            input.ReadInt64(ref singleInt64_);
+            break;
+          }
+          case 24: {
+            input.ReadUInt32(ref singleUint32_);
+            break;
+          }
+          case 32: {
+            input.ReadUInt64(ref singleUint64_);
+            break;
+          }
+          case 40: {
+            input.ReadSInt32(ref singleSint32_);
+            break;
+          }
+          case 48: {
+            input.ReadSInt64(ref singleSint64_);
+            break;
+          }
+          case 61: {
+            input.ReadFixed32(ref singleFixed32_);
+            break;
+          }
+          case 65: {
+            input.ReadFixed64(ref singleFixed64_);
+            break;
+          }
+          case 77: {
+            input.ReadSFixed32(ref singleSfixed32_);
+            break;
+          }
+          case 81: {
+            input.ReadSFixed64(ref singleSfixed64_);
+            break;
+          }
+          case 93: {
+            input.ReadFloat(ref singleFloat_);
+            break;
+          }
+          case 97: {
+            input.ReadDouble(ref singleDouble_);
+            break;
+          }
+          case 104: {
+            input.ReadBool(ref singleBool_);
+            break;
+          }
+          case 114: {
+            input.ReadString(ref singleString_);
+            break;
+          }
+          case 122: {
+            input.ReadBytes(ref singleBytes_);
+            break;
+          }
+          case 146: {
+            if (singleNestedMessage_ == null) {
+              singleNestedMessage_ = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
+            }
+            input.ReadMessage(singleNestedMessage_);
+            break;
+          }
+          case 154: {
+            if (singleForeignMessage_ == null) {
+              singleForeignMessage_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
+            }
+            input.ReadMessage(singleForeignMessage_);
+            break;
+          }
+          case 162: {
+            if (singleImportMessage_ == null) {
+              singleImportMessage_ = new global::Google.Protobuf.TestProtos.ImportMessage();
+            }
+            input.ReadMessage(singleImportMessage_);
+            break;
+          }
+          case 168: {
+            input.ReadEnum(ref singleNestedEnum_);
+            break;
+          }
+          case 176: {
+            input.ReadEnum(ref singleForeignEnum_);
+            break;
+          }
+          case 184: {
+            input.ReadEnum(ref singleImportEnum_);
+            break;
+          }
+          case 210: {
+            if (singlePublicImportMessage_ == null) {
+              singlePublicImportMessage_ = new global::Google.Protobuf.TestProtos.PublicImportMessage();
+            }
+            input.ReadMessage(singlePublicImportMessage_);
+            break;
+          }
+          case 250:
+          case 248: {
+            input.ReadInt32Array(tag, fieldName, repeatedInt32_);
+            break;
+          }
+          case 258:
+          case 256: {
+            input.ReadInt64Array(tag, fieldName, repeatedInt64_);
+            break;
+          }
+          case 266:
+          case 264: {
+            input.ReadUInt32Array(tag, fieldName, repeatedUint32_);
+            break;
+          }
+          case 274:
+          case 272: {
+            input.ReadUInt64Array(tag, fieldName, repeatedUint64_);
+            break;
+          }
+          case 282:
+          case 280: {
+            input.ReadSInt32Array(tag, fieldName, repeatedSint32_);
+            break;
+          }
+          case 290:
+          case 288: {
+            input.ReadSInt64Array(tag, fieldName, repeatedSint64_);
+            break;
+          }
+          case 298:
+          case 301: {
+            input.ReadFixed32Array(tag, fieldName, repeatedFixed32_);
+            break;
+          }
+          case 306:
+          case 305: {
+            input.ReadFixed64Array(tag, fieldName, repeatedFixed64_);
+            break;
+          }
+          case 314:
+          case 317: {
+            input.ReadSFixed32Array(tag, fieldName, repeatedSfixed32_);
+            break;
+          }
+          case 322:
+          case 321: {
+            input.ReadSFixed64Array(tag, fieldName, repeatedSfixed64_);
+            break;
+          }
+          case 330:
+          case 333: {
+            input.ReadFloatArray(tag, fieldName, repeatedFloat_);
+            break;
+          }
+          case 338:
+          case 337: {
+            input.ReadDoubleArray(tag, fieldName, repeatedDouble_);
+            break;
+          }
+          case 346:
+          case 344: {
+            input.ReadBoolArray(tag, fieldName, repeatedBool_);
+            break;
+          }
+          case 354: {
+            input.ReadStringArray(tag, fieldName, repeatedString_);
+            break;
+          }
+          case 362: {
+            input.ReadBytesArray(tag, fieldName, repeatedBytes_);
+            break;
+          }
+          case 386: {
+            input.ReadMessageArray(tag, fieldName, repeatedNestedMessage_, global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage.Parser);
+            break;
+          }
+          case 394: {
+            input.ReadMessageArray(tag, fieldName, repeatedForeignMessage_, global::Google.Protobuf.TestProtos.ForeignMessage.Parser);
+            break;
+          }
+          case 402: {
+            input.ReadMessageArray(tag, fieldName, repeatedImportMessage_, global::Google.Protobuf.TestProtos.ImportMessage.Parser);
+            break;
+          }
+          case 410:
+          case 408: {
+            input.ReadEnumArray<global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedEnum>(tag, fieldName, repeatedNestedEnum_);
+            break;
+          }
+          case 418:
+          case 416: {
+            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ForeignEnum>(tag, fieldName, repeatedForeignEnum_);
+            break;
+          }
+          case 426:
+          case 424: {
+            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ImportEnum>(tag, fieldName, repeatedImportEnum_);
+            break;
+          }
+          case 434: {
+            input.ReadMessageArray(tag, fieldName, repeatedPublicImportMessage_, global::Google.Protobuf.TestProtos.PublicImportMessage.Parser);
+            break;
+          }
+          case 888: {
+            uint value = 0;
+            if (input.ReadUInt32(ref value)) {
+              oneofField_ = value;
+              oneofFieldCase_ = OneofFieldOneofCase.OneofUint32;
+            }
+            break;
+          }
+          case 898: {
+            global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage subBuilder = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
+            if (oneofFieldCase_ == OneofFieldOneofCase.OneofNestedMessage) {
+              subBuilder.MergeFrom(OneofNestedMessage);
+            }
+            input.ReadMessage(subBuilder);
+            OneofNestedMessage = subBuilder;
+            break;
+          }
+          case 906: {
+            string value = "";
+            if (input.ReadString(ref value)) {
+              oneofField_ = value;
+              oneofFieldCase_ = OneofFieldOneofCase.OneofString;
+            }
+            break;
+          }
+          case 914: {
+            pb::ByteString value = pb::ByteString.Empty;
+            if (input.ReadBytes(ref value)) {
+              oneofField_ = value;
+              oneofFieldCase_ = OneofFieldOneofCase.OneofBytes;
+            }
+            break;
+          }
+        }
+      }
+    }
+
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    public static partial class Types {
+      public enum NestedEnum : long {
+        NESTED_ENUM_UNSPECIFIED = 0,
+        FOO = 1,
+        BAR = 2,
+        BAZ = 3,
+        NEG = -1,
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class NestedMessage : pb::IMessage<NestedMessage>, global::System.IEquatable<NestedMessage> {
+        private static readonly pb::MessageParser<NestedMessage> _parser = new pb::MessageParser<NestedMessage>(() => new NestedMessage());
+        public static pb::MessageParser<NestedMessage> Parser { get { return _parser; } }
+
+        private static readonly string[] _fieldNames = new string[] { "bb" };
+        private static readonly uint[] _fieldTags = new uint[] { 8 };
+        public static pbd::MessageDescriptor Descriptor {
+          get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor; }
+        }
+
+        public pb::FieldAccess.FieldAccessorTable<NestedMessage> Fields {
+          get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable; }
+        }
+
+        public NestedMessage() { }
+        public NestedMessage(NestedMessage other) {
+          MergeFrom(other);
+        }
+        public const int BbFieldNumber = 1;
+        private int bb_;
+        public int Bb {
+          get { return bb_; }
+          set { bb_ = value; }
+        }
+
+
+        public override bool Equals(object other) {
+          return Equals(other as NestedMessage);
+        }
+
+        public bool Equals(NestedMessage other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Bb != other.Bb) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 0;
+          if (Bb != 0) hash ^= Bb.GetHashCode();
+          return hash;
+        }
+
+        public void WriteTo(pb::ICodedOutputStream output) {
+          string[] fieldNames = _fieldNames;
+          if (Bb != 0) {
+            output.WriteInt32(1, fieldNames[0], Bb);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Bb != 0) {
+            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
+          }
+          return size;
+        }
+        public void MergeFrom(NestedMessage other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Bb != 0) {
+            Bb = other.Bb;
+          }
+        }
+
+        public void MergeFrom(pb::ICodedInputStream input) {
+          uint tag;
+          string fieldName;
+          while (input.ReadTag(out tag, out fieldName)) {
+            if (tag == 0 && fieldName != null) {
+              int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+              if (fieldOrdinal >= 0) {
+                tag = _fieldTags[fieldOrdinal];
+              }
+            }
+            switch(tag) {
+              case 0:
+                throw pb::InvalidProtocolBufferException.InvalidTag();
+              default:
+                if (pb::WireFormat.IsEndGroupTag(tag)) {
+                  return;
+                }
+                break;
+              case 8: {
+                input.ReadInt32(ref bb_);
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+    }
+    #endregion
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class NestedTestAllTypes : pb::IMessage<NestedTestAllTypes>, global::System.IEquatable<NestedTestAllTypes> {
+    private static readonly pb::MessageParser<NestedTestAllTypes> _parser = new pb::MessageParser<NestedTestAllTypes>(() => new NestedTestAllTypes());
+    public static pb::MessageParser<NestedTestAllTypes> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "child", "payload", "repeated_child" };
+    private static readonly uint[] _fieldTags = new uint[] { 10, 18, 26 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_NestedTestAllTypes__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<NestedTestAllTypes> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_NestedTestAllTypes__FieldAccessorTable; }
+    }
+
+    public NestedTestAllTypes() { }
+    public NestedTestAllTypes(NestedTestAllTypes other) {
+      MergeFrom(other);
+    }
+    public const int ChildFieldNumber = 1;
+    private global::Google.Protobuf.TestProtos.NestedTestAllTypes child_;
+    public global::Google.Protobuf.TestProtos.NestedTestAllTypes Child {
+      get { return child_; }
+      set { child_ = value; }
+    }
+
+    public const int PayloadFieldNumber = 2;
+    private global::Google.Protobuf.TestProtos.TestAllTypes payload_;
+    public global::Google.Protobuf.TestProtos.TestAllTypes Payload {
+      get { return payload_; }
+      set { payload_ = value; }
+    }
+
+    public const int RepeatedChildFieldNumber = 3;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.NestedTestAllTypes> repeatedChild_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.NestedTestAllTypes>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.NestedTestAllTypes> RepeatedChild {
+      get { return repeatedChild_; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as NestedTestAllTypes);
+    }
+
+    public bool Equals(NestedTestAllTypes other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (!object.Equals(Child, other.Child)) return false;if (!object.Equals(Payload, other.Payload)) return false;if(!repeatedChild_.Equals(other.repeatedChild_)) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (child_ != null) hash ^= Child.GetHashCode();
+      if (payload_ != null) hash ^= Payload.GetHashCode();
+      hash ^= repeatedChild_.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (child_ != null) {
+        output.WriteMessage(1, fieldNames[0], Child);
+      }
+      if (payload_ != null) {
+        output.WriteMessage(2, fieldNames[1], Payload);
+      }
+      output.WriteMessageArray(3, fieldNames[2], repeatedChild_);
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (child_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(1, Child);
+      }
+      if (payload_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(2, Payload);
+      }
+      foreach (global::Google.Protobuf.TestProtos.NestedTestAllTypes element in repeatedChild_) {
+        size += pb::CodedOutputStream.ComputeMessageSize(3, element);
+      }
+      return size;
+    }
+    public void MergeFrom(NestedTestAllTypes other) {
+      if (other == null) {
+        return;
+      }
+      if (other.child_ != null) {
+        if (child_ == null) {
+          child_ = new global::Google.Protobuf.TestProtos.NestedTestAllTypes();
+        }
+        Child.MergeFrom(other.Child);
+      }
+      if (other.payload_ != null) {
+        if (payload_ == null) {
+          payload_ = new global::Google.Protobuf.TestProtos.TestAllTypes();
+        }
+        Payload.MergeFrom(other.Payload);
+      }
+      repeatedChild_.Add(other.repeatedChild_);
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            if (child_ == null) {
+              child_ = new global::Google.Protobuf.TestProtos.NestedTestAllTypes();
+            }
+            input.ReadMessage(child_);
+            break;
+          }
+          case 18: {
+            if (payload_ == null) {
+              payload_ = new global::Google.Protobuf.TestProtos.TestAllTypes();
+            }
+            input.ReadMessage(payload_);
+            break;
+          }
+          case 26: {
+            input.ReadMessageArray(tag, fieldName, repeatedChild_, global::Google.Protobuf.TestProtos.NestedTestAllTypes.Parser);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestDeprecatedFields : pb::IMessage<TestDeprecatedFields>, global::System.IEquatable<TestDeprecatedFields> {
+    private static readonly pb::MessageParser<TestDeprecatedFields> _parser = new pb::MessageParser<TestDeprecatedFields>(() => new TestDeprecatedFields());
+    public static pb::MessageParser<TestDeprecatedFields> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "deprecated_int32" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestDeprecatedFields> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable; }
+    }
+
+    public TestDeprecatedFields() { }
+    public TestDeprecatedFields(TestDeprecatedFields other) {
+      MergeFrom(other);
+    }
+    public const int DeprecatedInt32FieldNumber = 1;
+    private int deprecatedInt32_;
+    [global::System.ObsoleteAttribute()]
+    public int DeprecatedInt32 {
+      get { return deprecatedInt32_; }
+      set { deprecatedInt32_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as TestDeprecatedFields);
+    }
+
+    public bool Equals(TestDeprecatedFields other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (DeprecatedInt32 != other.DeprecatedInt32) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (DeprecatedInt32 != 0) hash ^= DeprecatedInt32.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (DeprecatedInt32 != 0) {
+        output.WriteInt32(1, fieldNames[0], DeprecatedInt32);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (DeprecatedInt32 != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedInt32);
+      }
+      return size;
+    }
+    public void MergeFrom(TestDeprecatedFields other) {
+      if (other == null) {
+        return;
+      }
+      if (other.DeprecatedInt32 != 0) {
+        DeprecatedInt32 = other.DeprecatedInt32;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref deprecatedInt32_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class ForeignMessage : pb::IMessage<ForeignMessage>, global::System.IEquatable<ForeignMessage> {
+    private static readonly pb::MessageParser<ForeignMessage> _parser = new pb::MessageParser<ForeignMessage>(() => new ForeignMessage());
+    public static pb::MessageParser<ForeignMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "c" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_ForeignMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<ForeignMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable; }
+    }
+
+    public ForeignMessage() { }
+    public ForeignMessage(ForeignMessage other) {
+      MergeFrom(other);
+    }
+    public const int CFieldNumber = 1;
+    private int c_;
+    public int C {
+      get { return c_; }
+      set { c_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as ForeignMessage);
+    }
+
+    public bool Equals(ForeignMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (C != other.C) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (C != 0) hash ^= C.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (C != 0) {
+        output.WriteInt32(1, fieldNames[0], C);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (C != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, C);
+      }
+      return size;
+    }
+    public void MergeFrom(ForeignMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.C != 0) {
+        C = other.C;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref c_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestReservedFields : pb::IMessage<TestReservedFields>, global::System.IEquatable<TestReservedFields> {
+    private static readonly pb::MessageParser<TestReservedFields> _parser = new pb::MessageParser<TestReservedFields>(() => new TestReservedFields());
+    public static pb::MessageParser<TestReservedFields> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] {  };
+    private static readonly uint[] _fieldTags = new uint[] {  };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestReservedFields__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestReservedFields> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestReservedFields__FieldAccessorTable; }
+    }
+
+    public TestReservedFields() { }
+    public TestReservedFields(TestReservedFields other) {
+      MergeFrom(other);
+    }
+    public override bool Equals(object other) {
+      return Equals(other as TestReservedFields);
+    }
+
+    public bool Equals(TestReservedFields other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+    public void MergeFrom(TestReservedFields other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestForeignNested : pb::IMessage<TestForeignNested>, global::System.IEquatable<TestForeignNested> {
+    private static readonly pb::MessageParser<TestForeignNested> _parser = new pb::MessageParser<TestForeignNested>(() => new TestForeignNested());
+    public static pb::MessageParser<TestForeignNested> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "foreign_nested" };
+    private static readonly uint[] _fieldTags = new uint[] { 10 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestForeignNested__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestForeignNested> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable; }
+    }
+
+    public TestForeignNested() { }
+    public TestForeignNested(TestForeignNested other) {
+      MergeFrom(other);
+    }
+    public const int ForeignNestedFieldNumber = 1;
+    private global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage foreignNested_;
+    public global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {
+      get { return foreignNested_; }
+      set { foreignNested_ = value; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestForeignNested);
+    }
+
+    public bool Equals(TestForeignNested other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (!object.Equals(ForeignNested, other.ForeignNested)) return false;  return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (foreignNested_ != null) hash ^= ForeignNested.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (foreignNested_ != null) {
+        output.WriteMessage(1, fieldNames[0], ForeignNested);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (foreignNested_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(1, ForeignNested);
+      }
+      return size;
+    }
+    public void MergeFrom(TestForeignNested other) {
+      if (other == null) {
+        return;
+      }
+      if (other.foreignNested_ != null) {
+        if (foreignNested_ == null) {
+          foreignNested_ = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
+        }
+        ForeignNested.MergeFrom(other.ForeignNested);
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            if (foreignNested_ == null) {
+              foreignNested_ = new global::Google.Protobuf.TestProtos.TestAllTypes.Types.NestedMessage();
+            }
+            input.ReadMessage(foreignNested_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestReallyLargeTagNumber : pb::IMessage<TestReallyLargeTagNumber>, global::System.IEquatable<TestReallyLargeTagNumber> {
+    private static readonly pb::MessageParser<TestReallyLargeTagNumber> _parser = new pb::MessageParser<TestReallyLargeTagNumber>(() => new TestReallyLargeTagNumber());
+    public static pb::MessageParser<TestReallyLargeTagNumber> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "a", "bb" };
+    private static readonly uint[] _fieldTags = new uint[] { 8, 2147483640 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestReallyLargeTagNumber> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable; }
+    }
+
+    public TestReallyLargeTagNumber() { }
+    public TestReallyLargeTagNumber(TestReallyLargeTagNumber other) {
+      MergeFrom(other);
+    }
+    public const int AFieldNumber = 1;
+    private int a_;
+    public int A {
+      get { return a_; }
+      set { a_ = value; }
+    }
+
+
+    public const int BbFieldNumber = 268435455;
+    private int bb_;
+    public int Bb {
+      get { return bb_; }
+      set { bb_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as TestReallyLargeTagNumber);
+    }
+
+    public bool Equals(TestReallyLargeTagNumber other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (A != other.A) return false;
+      if (Bb != other.Bb) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (A != 0) hash ^= A.GetHashCode();
+      if (Bb != 0) hash ^= Bb.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (A != 0) {
+        output.WriteInt32(1, fieldNames[0], A);
+      }
+      if (Bb != 0) {
+        output.WriteInt32(268435455, fieldNames[1], Bb);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (A != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);
+      }
+      if (Bb != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(268435455, Bb);
+      }
+      return size;
+    }
+    public void MergeFrom(TestReallyLargeTagNumber other) {
+      if (other == null) {
+        return;
+      }
+      if (other.A != 0) {
+        A = other.A;
+      }
+      if (other.Bb != 0) {
+        Bb = other.Bb;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref a_);
+            break;
+          }
+          case 2147483640: {
+            input.ReadInt32(ref bb_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestRecursiveMessage : pb::IMessage<TestRecursiveMessage>, global::System.IEquatable<TestRecursiveMessage> {
+    private static readonly pb::MessageParser<TestRecursiveMessage> _parser = new pb::MessageParser<TestRecursiveMessage>(() => new TestRecursiveMessage());
+    public static pb::MessageParser<TestRecursiveMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "a", "i" };
+    private static readonly uint[] _fieldTags = new uint[] { 10, 16 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestRecursiveMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable; }
+    }
+
+    public TestRecursiveMessage() { }
+    public TestRecursiveMessage(TestRecursiveMessage other) {
+      MergeFrom(other);
+    }
+    public const int AFieldNumber = 1;
+    private global::Google.Protobuf.TestProtos.TestRecursiveMessage a_;
+    public global::Google.Protobuf.TestProtos.TestRecursiveMessage A {
+      get { return a_; }
+      set { a_ = value; }
+    }
+
+    public const int IFieldNumber = 2;
+    private int i_;
+    public int I {
+      get { return i_; }
+      set { i_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as TestRecursiveMessage);
+    }
+
+    public bool Equals(TestRecursiveMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (!object.Equals(A, other.A)) return false;if (I != other.I) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (a_ != null) hash ^= A.GetHashCode();
+      if (I != 0) hash ^= I.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (a_ != null) {
+        output.WriteMessage(1, fieldNames[0], A);
+      }
+      if (I != 0) {
+        output.WriteInt32(2, fieldNames[1], I);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (a_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(1, A);
+      }
+      if (I != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(2, I);
+      }
+      return size;
+    }
+    public void MergeFrom(TestRecursiveMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.a_ != null) {
+        if (a_ == null) {
+          a_ = new global::Google.Protobuf.TestProtos.TestRecursiveMessage();
+        }
+        A.MergeFrom(other.A);
+      }
+      if (other.I != 0) {
+        I = other.I;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            if (a_ == null) {
+              a_ = new global::Google.Protobuf.TestProtos.TestRecursiveMessage();
+            }
+            input.ReadMessage(a_);
+            break;
+          }
+          case 16: {
+            input.ReadInt32(ref i_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestMutualRecursionA : pb::IMessage<TestMutualRecursionA>, global::System.IEquatable<TestMutualRecursionA> {
+    private static readonly pb::MessageParser<TestMutualRecursionA> _parser = new pb::MessageParser<TestMutualRecursionA>(() => new TestMutualRecursionA());
+    public static pb::MessageParser<TestMutualRecursionA> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "bb" };
+    private static readonly uint[] _fieldTags = new uint[] { 10 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestMutualRecursionA> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable; }
+    }
+
+    public TestMutualRecursionA() { }
+    public TestMutualRecursionA(TestMutualRecursionA other) {
+      MergeFrom(other);
+    }
+    public const int BbFieldNumber = 1;
+    private global::Google.Protobuf.TestProtos.TestMutualRecursionB bb_;
+    public global::Google.Protobuf.TestProtos.TestMutualRecursionB Bb {
+      get { return bb_; }
+      set { bb_ = value; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestMutualRecursionA);
+    }
+
+    public bool Equals(TestMutualRecursionA other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (!object.Equals(Bb, other.Bb)) return false;  return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (bb_ != null) hash ^= Bb.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (bb_ != null) {
+        output.WriteMessage(1, fieldNames[0], Bb);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (bb_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(1, Bb);
+      }
+      return size;
+    }
+    public void MergeFrom(TestMutualRecursionA other) {
+      if (other == null) {
+        return;
+      }
+      if (other.bb_ != null) {
+        if (bb_ == null) {
+          bb_ = new global::Google.Protobuf.TestProtos.TestMutualRecursionB();
+        }
+        Bb.MergeFrom(other.Bb);
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            if (bb_ == null) {
+              bb_ = new global::Google.Protobuf.TestProtos.TestMutualRecursionB();
+            }
+            input.ReadMessage(bb_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestMutualRecursionB : pb::IMessage<TestMutualRecursionB>, global::System.IEquatable<TestMutualRecursionB> {
+    private static readonly pb::MessageParser<TestMutualRecursionB> _parser = new pb::MessageParser<TestMutualRecursionB>(() => new TestMutualRecursionB());
+    public static pb::MessageParser<TestMutualRecursionB> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "a", "optional_int32" };
+    private static readonly uint[] _fieldTags = new uint[] { 10, 16 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestMutualRecursionB> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable; }
+    }
+
+    public TestMutualRecursionB() { }
+    public TestMutualRecursionB(TestMutualRecursionB other) {
+      MergeFrom(other);
+    }
+    public const int AFieldNumber = 1;
+    private global::Google.Protobuf.TestProtos.TestMutualRecursionA a_;
+    public global::Google.Protobuf.TestProtos.TestMutualRecursionA A {
+      get { return a_; }
+      set { a_ = value; }
+    }
+
+    public const int OptionalInt32FieldNumber = 2;
+    private int optionalInt32_;
+    public int OptionalInt32 {
+      get { return optionalInt32_; }
+      set { optionalInt32_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as TestMutualRecursionB);
+    }
+
+    public bool Equals(TestMutualRecursionB other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (!object.Equals(A, other.A)) return false;if (OptionalInt32 != other.OptionalInt32) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (a_ != null) hash ^= A.GetHashCode();
+      if (OptionalInt32 != 0) hash ^= OptionalInt32.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (a_ != null) {
+        output.WriteMessage(1, fieldNames[0], A);
+      }
+      if (OptionalInt32 != 0) {
+        output.WriteInt32(2, fieldNames[1], OptionalInt32);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (a_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(1, A);
+      }
+      if (OptionalInt32 != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(2, OptionalInt32);
+      }
+      return size;
+    }
+    public void MergeFrom(TestMutualRecursionB other) {
+      if (other == null) {
+        return;
+      }
+      if (other.a_ != null) {
+        if (a_ == null) {
+          a_ = new global::Google.Protobuf.TestProtos.TestMutualRecursionA();
+        }
+        A.MergeFrom(other.A);
+      }
+      if (other.OptionalInt32 != 0) {
+        OptionalInt32 = other.OptionalInt32;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            if (a_ == null) {
+              a_ = new global::Google.Protobuf.TestProtos.TestMutualRecursionA();
+            }
+            input.ReadMessage(a_);
+            break;
+          }
+          case 16: {
+            input.ReadInt32(ref optionalInt32_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestCamelCaseFieldNames : pb::IMessage<TestCamelCaseFieldNames>, global::System.IEquatable<TestCamelCaseFieldNames> {
+    private static readonly pb::MessageParser<TestCamelCaseFieldNames> _parser = new pb::MessageParser<TestCamelCaseFieldNames>(() => new TestCamelCaseFieldNames());
+    public static pb::MessageParser<TestCamelCaseFieldNames> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "EnumField", "MessageField", "PrimitiveField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedPrimitiveField", "RepeatedStringField", "StringField" };
+    private static readonly uint[] _fieldTags = new uint[] { 24, 34, 8, 72, 82, 56, 66, 18 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestCamelCaseFieldNames> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable; }
+    }
+
+    public TestCamelCaseFieldNames() { }
+    public TestCamelCaseFieldNames(TestCamelCaseFieldNames other) {
+      MergeFrom(other);
+    }
+    public const int PrimitiveFieldFieldNumber = 1;
+    private int primitiveField_;
+    public int PrimitiveField {
+      get { return primitiveField_; }
+      set { primitiveField_ = value; }
+    }
+
+
+    public const int StringFieldFieldNumber = 2;
+    private string stringField_ = "";
+    public string StringField {
+      get { return stringField_; }
+      set { stringField_ = value ?? ""; }
+    }
+
+
+    public const int EnumFieldFieldNumber = 3;
+    private global::Google.Protobuf.TestProtos.ForeignEnum enumField_ = global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED;
+    public global::Google.Protobuf.TestProtos.ForeignEnum EnumField {
+      get { return enumField_; }
+      set { enumField_ = value; }
+    }
+
+
+    public const int MessageFieldFieldNumber = 4;
+    private global::Google.Protobuf.TestProtos.ForeignMessage messageField_;
+    public global::Google.Protobuf.TestProtos.ForeignMessage MessageField {
+      get { return messageField_; }
+      set { messageField_ = value; }
+    }
+
+    public const int RepeatedPrimitiveFieldFieldNumber = 7;
+    private readonly pbc::RepeatedField<int> repeatedPrimitiveField_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> RepeatedPrimitiveField {
+      get { return repeatedPrimitiveField_; }
+    }
+
+    public const int RepeatedStringFieldFieldNumber = 8;
+    private readonly pbc::RepeatedField<string> repeatedStringField_ = new pbc::RepeatedField<string>();
+    public pbc::RepeatedField<string> RepeatedStringField {
+      get { return repeatedStringField_; }
+    }
+
+    public const int RepeatedEnumFieldFieldNumber = 9;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> repeatedEnumField_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> RepeatedEnumField {
+      get { return repeatedEnumField_; }
+    }
+
+    public const int RepeatedMessageFieldFieldNumber = 10;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage> repeatedMessageField_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignMessage> RepeatedMessageField {
+      get { return repeatedMessageField_; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestCamelCaseFieldNames);
+    }
+
+    public bool Equals(TestCamelCaseFieldNames other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (PrimitiveField != other.PrimitiveField) return false;
+      if (StringField != other.StringField) return false;
+      if (EnumField != other.EnumField) return false;
+      if (!object.Equals(MessageField, other.MessageField)) return false;if(!repeatedPrimitiveField_.Equals(other.repeatedPrimitiveField_)) return false;
+      if(!repeatedStringField_.Equals(other.repeatedStringField_)) return false;
+      if(!repeatedEnumField_.Equals(other.repeatedEnumField_)) return false;
+      if(!repeatedMessageField_.Equals(other.repeatedMessageField_)) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (PrimitiveField != 0) hash ^= PrimitiveField.GetHashCode();
+      if (StringField != "") hash ^= StringField.GetHashCode();
+      if (EnumField != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) hash ^= EnumField.GetHashCode();
+      if (messageField_ != null) hash ^= MessageField.GetHashCode();
+      hash ^= repeatedPrimitiveField_.GetHashCode();
+      hash ^= repeatedStringField_.GetHashCode();
+      hash ^= repeatedEnumField_.GetHashCode();
+      hash ^= repeatedMessageField_.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (PrimitiveField != 0) {
+        output.WriteInt32(1, fieldNames[2], PrimitiveField);
+      }
+      if (StringField != "") {
+        output.WriteString(2, fieldNames[7], StringField);
+      }
+      if (EnumField != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
+        output.WriteEnum(3, fieldNames[0], EnumField);
+      }
+      if (messageField_ != null) {
+        output.WriteMessage(4, fieldNames[1], MessageField);
+      }
+      output.WritePackedInt32Array(7, fieldNames[5], repeatedPrimitiveField_);
+      output.WriteStringArray(8, fieldNames[6], repeatedStringField_);
+      output.WritePackedEnumArray(9, fieldNames[3], repeatedEnumField_);
+      output.WriteMessageArray(10, fieldNames[4], repeatedMessageField_);
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (PrimitiveField != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveField);
+      }
+      if (StringField != "") {
+        size += pb::CodedOutputStream.ComputeStringSize(2, StringField);
+      }
+      if (EnumField != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
+        size += pb::CodedOutputStream.ComputeEnumSize(3, EnumField);
+      }
+      if (messageField_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(4, MessageField);
+      }
+      {
+        int dataSize = 0;
+        foreach (int element in repeatedPrimitiveField_) {
+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedPrimitiveField_.Count != 0) {
+          size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (string element in repeatedStringField_) {
+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
+        }
+        size += dataSize;
+        size += 1 * repeatedStringField_.Count;
+      }
+      {
+        int dataSize = 0;
+        if (repeatedEnumField_.Count > 0) {
+          foreach (global::Google.Protobuf.TestProtos.ForeignEnum element in repeatedEnumField_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 1;
+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
+        }
+      }
+      foreach (global::Google.Protobuf.TestProtos.ForeignMessage element in repeatedMessageField_) {
+        size += pb::CodedOutputStream.ComputeMessageSize(10, element);
+      }
+      return size;
+    }
+    public void MergeFrom(TestCamelCaseFieldNames other) {
+      if (other == null) {
+        return;
+      }
+      if (other.PrimitiveField != 0) {
+        PrimitiveField = other.PrimitiveField;
+      }
+      if (other.StringField != "") {
+        StringField = other.StringField;
+      }
+      if (other.EnumField != global::Google.Protobuf.TestProtos.ForeignEnum.FOREIGN_UNSPECIFIED) {
+        EnumField = other.EnumField;
+      }
+      if (other.messageField_ != null) {
+        if (messageField_ == null) {
+          messageField_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
+        }
+        MessageField.MergeFrom(other.MessageField);
+      }
+      repeatedPrimitiveField_.Add(other.repeatedPrimitiveField_);
+      repeatedStringField_.Add(other.repeatedStringField_);
+      repeatedEnumField_.Add(other.repeatedEnumField_);
+      repeatedMessageField_.Add(other.repeatedMessageField_);
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref primitiveField_);
+            break;
+          }
+          case 18: {
+            input.ReadString(ref stringField_);
+            break;
+          }
+          case 24: {
+            input.ReadEnum(ref enumField_);
+            break;
+          }
+          case 34: {
+            if (messageField_ == null) {
+              messageField_ = new global::Google.Protobuf.TestProtos.ForeignMessage();
+            }
+            input.ReadMessage(messageField_);
+            break;
+          }
+          case 58:
+          case 56: {
+            input.ReadInt32Array(tag, fieldName, repeatedPrimitiveField_);
+            break;
+          }
+          case 66: {
+            input.ReadStringArray(tag, fieldName, repeatedStringField_);
+            break;
+          }
+          case 74:
+          case 72: {
+            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ForeignEnum>(tag, fieldName, repeatedEnumField_);
+            break;
+          }
+          case 82: {
+            input.ReadMessageArray(tag, fieldName, repeatedMessageField_, global::Google.Protobuf.TestProtos.ForeignMessage.Parser);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestFieldOrderings : pb::IMessage<TestFieldOrderings>, global::System.IEquatable<TestFieldOrderings> {
+    private static readonly pb::MessageParser<TestFieldOrderings> _parser = new pb::MessageParser<TestFieldOrderings>(() => new TestFieldOrderings());
+    public static pb::MessageParser<TestFieldOrderings> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "my_float", "my_int", "my_string", "single_nested_message" };
+    private static readonly uint[] _fieldTags = new uint[] { 813, 8, 90, 1602 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestFieldOrderings__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestFieldOrderings> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable; }
+    }
+
+    public TestFieldOrderings() { }
+    public TestFieldOrderings(TestFieldOrderings other) {
+      MergeFrom(other);
+    }
+    public const int MyStringFieldNumber = 11;
+    private string myString_ = "";
+    public string MyString {
+      get { return myString_; }
+      set { myString_ = value ?? ""; }
+    }
+
+
+    public const int MyIntFieldNumber = 1;
+    private long myInt_;
+    public long MyInt {
+      get { return myInt_; }
+      set { myInt_ = value; }
+    }
+
+
+    public const int MyFloatFieldNumber = 101;
+    private float myFloat_;
+    public float MyFloat {
+      get { return myFloat_; }
+      set { myFloat_ = value; }
+    }
+
+
+    public const int SingleNestedMessageFieldNumber = 200;
+    private global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage singleNestedMessage_;
+    public global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage SingleNestedMessage {
+      get { return singleNestedMessage_; }
+      set { singleNestedMessage_ = value; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestFieldOrderings);
+    }
+
+    public bool Equals(TestFieldOrderings other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (MyString != other.MyString) return false;
+      if (MyInt != other.MyInt) return false;
+      if (MyFloat != other.MyFloat) return false;
+      if (!object.Equals(SingleNestedMessage, other.SingleNestedMessage)) return false;  return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (MyString != "") hash ^= MyString.GetHashCode();
+      if (MyInt != 0L) hash ^= MyInt.GetHashCode();
+      if (MyFloat != 0F) hash ^= MyFloat.GetHashCode();
+      if (singleNestedMessage_ != null) hash ^= SingleNestedMessage.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (MyInt != 0L) {
+        output.WriteInt64(1, fieldNames[1], MyInt);
+      }
+      if (MyString != "") {
+        output.WriteString(11, fieldNames[2], MyString);
+      }
+      if (MyFloat != 0F) {
+        output.WriteFloat(101, fieldNames[0], MyFloat);
+      }
+      if (singleNestedMessage_ != null) {
+        output.WriteMessage(200, fieldNames[3], SingleNestedMessage);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (MyString != "") {
+        size += pb::CodedOutputStream.ComputeStringSize(11, MyString);
+      }
+      if (MyInt != 0L) {
+        size += pb::CodedOutputStream.ComputeInt64Size(1, MyInt);
+      }
+      if (MyFloat != 0F) {
+        size += pb::CodedOutputStream.ComputeFloatSize(101, MyFloat);
+      }
+      if (singleNestedMessage_ != null) {
+        size += pb::CodedOutputStream.ComputeMessageSize(200, SingleNestedMessage);
+      }
+      return size;
+    }
+    public void MergeFrom(TestFieldOrderings other) {
+      if (other == null) {
+        return;
+      }
+      if (other.MyString != "") {
+        MyString = other.MyString;
+      }
+      if (other.MyInt != 0L) {
+        MyInt = other.MyInt;
+      }
+      if (other.MyFloat != 0F) {
+        MyFloat = other.MyFloat;
+      }
+      if (other.singleNestedMessage_ != null) {
+        if (singleNestedMessage_ == null) {
+          singleNestedMessage_ = new global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage();
+        }
+        SingleNestedMessage.MergeFrom(other.SingleNestedMessage);
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt64(ref myInt_);
+            break;
+          }
+          case 90: {
+            input.ReadString(ref myString_);
+            break;
+          }
+          case 813: {
+            input.ReadFloat(ref myFloat_);
+            break;
+          }
+          case 1602: {
+            if (singleNestedMessage_ == null) {
+              singleNestedMessage_ = new global::Google.Protobuf.TestProtos.TestFieldOrderings.Types.NestedMessage();
+            }
+            input.ReadMessage(singleNestedMessage_);
+            break;
+          }
+        }
+      }
+    }
+
+    #region Nested types
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    public static partial class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class NestedMessage : pb::IMessage<NestedMessage>, global::System.IEquatable<NestedMessage> {
+        private static readonly pb::MessageParser<NestedMessage> _parser = new pb::MessageParser<NestedMessage>(() => new NestedMessage());
+        public static pb::MessageParser<NestedMessage> Parser { get { return _parser; } }
+
+        private static readonly string[] _fieldNames = new string[] { "bb", "oo" };
+        private static readonly uint[] _fieldTags = new uint[] { 8, 16 };
+        public static pbd::MessageDescriptor Descriptor {
+          get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__Descriptor; }
+        }
+
+        public pb::FieldAccess.FieldAccessorTable<NestedMessage> Fields {
+          get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestFieldOrderings_NestedMessage__FieldAccessorTable; }
+        }
+
+        public NestedMessage() { }
+        public NestedMessage(NestedMessage other) {
+          MergeFrom(other);
+        }
+        public const int OoFieldNumber = 2;
+        private long oo_;
+        public long Oo {
+          get { return oo_; }
+          set { oo_ = value; }
+        }
+
+
+        public const int BbFieldNumber = 1;
+        private int bb_;
+        public int Bb {
+          get { return bb_; }
+          set { bb_ = value; }
+        }
+
+
+        public override bool Equals(object other) {
+          return Equals(other as NestedMessage);
+        }
+
+        public bool Equals(NestedMessage other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Oo != other.Oo) return false;
+          if (Bb != other.Bb) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 0;
+          if (Oo != 0L) hash ^= Oo.GetHashCode();
+          if (Bb != 0) hash ^= Bb.GetHashCode();
+          return hash;
+        }
+
+        public void WriteTo(pb::ICodedOutputStream output) {
+          string[] fieldNames = _fieldNames;
+          if (Bb != 0) {
+            output.WriteInt32(1, fieldNames[0], Bb);
+          }
+          if (Oo != 0L) {
+            output.WriteInt64(2, fieldNames[1], Oo);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Oo != 0L) {
+            size += pb::CodedOutputStream.ComputeInt64Size(2, Oo);
+          }
+          if (Bb != 0) {
+            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);
+          }
+          return size;
+        }
+        public void MergeFrom(NestedMessage other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Oo != 0L) {
+            Oo = other.Oo;
+          }
+          if (other.Bb != 0) {
+            Bb = other.Bb;
+          }
+        }
+
+        public void MergeFrom(pb::ICodedInputStream input) {
+          uint tag;
+          string fieldName;
+          while (input.ReadTag(out tag, out fieldName)) {
+            if (tag == 0 && fieldName != null) {
+              int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+              if (fieldOrdinal >= 0) {
+                tag = _fieldTags[fieldOrdinal];
+              }
+            }
+            switch(tag) {
+              case 0:
+                throw pb::InvalidProtocolBufferException.InvalidTag();
+              default:
+                if (pb::WireFormat.IsEndGroupTag(tag)) {
+                  return;
+                }
+                break;
+              case 8: {
+                input.ReadInt32(ref bb_);
+                break;
+              }
+              case 16: {
+                input.ReadInt64(ref oo_);
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+    }
+    #endregion
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class SparseEnumMessage : pb::IMessage<SparseEnumMessage>, global::System.IEquatable<SparseEnumMessage> {
+    private static readonly pb::MessageParser<SparseEnumMessage> _parser = new pb::MessageParser<SparseEnumMessage>(() => new SparseEnumMessage());
+    public static pb::MessageParser<SparseEnumMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "sparse_enum" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_SparseEnumMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<SparseEnumMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable; }
+    }
+
+    public SparseEnumMessage() { }
+    public SparseEnumMessage(SparseEnumMessage other) {
+      MergeFrom(other);
+    }
+    public const int SparseEnumFieldNumber = 1;
+    private global::Google.Protobuf.TestProtos.TestSparseEnum sparseEnum_ = global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED;
+    public global::Google.Protobuf.TestProtos.TestSparseEnum SparseEnum {
+      get { return sparseEnum_; }
+      set { sparseEnum_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as SparseEnumMessage);
+    }
+
+    public bool Equals(SparseEnumMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (SparseEnum != other.SparseEnum) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (SparseEnum != global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED) hash ^= SparseEnum.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (SparseEnum != global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED) {
+        output.WriteEnum(1, fieldNames[0], SparseEnum);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (SparseEnum != global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED) {
+        size += pb::CodedOutputStream.ComputeEnumSize(1, SparseEnum);
+      }
+      return size;
+    }
+    public void MergeFrom(SparseEnumMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.SparseEnum != global::Google.Protobuf.TestProtos.TestSparseEnum.TEST_SPARSE_ENUM_UNSPECIFIED) {
+        SparseEnum = other.SparseEnum;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadEnum(ref sparseEnum_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class OneString : pb::IMessage<OneString>, global::System.IEquatable<OneString> {
+    private static readonly pb::MessageParser<OneString> _parser = new pb::MessageParser<OneString>(() => new OneString());
+    public static pb::MessageParser<OneString> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 10 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_OneString__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<OneString> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_OneString__FieldAccessorTable; }
+    }
+
+    public OneString() { }
+    public OneString(OneString other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private string data_ = "";
+    public string Data {
+      get { return data_; }
+      set { data_ = value ?? ""; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as OneString);
+    }
+
+    public bool Equals(OneString other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Data != other.Data) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Data != "") hash ^= Data.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Data != "") {
+        output.WriteString(1, fieldNames[0], Data);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Data != "") {
+        size += pb::CodedOutputStream.ComputeStringSize(1, Data);
+      }
+      return size;
+    }
+    public void MergeFrom(OneString other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Data != "") {
+        Data = other.Data;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            input.ReadString(ref data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class MoreString : pb::IMessage<MoreString>, global::System.IEquatable<MoreString> {
+    private static readonly pb::MessageParser<MoreString> _parser = new pb::MessageParser<MoreString>(() => new MoreString());
+    public static pb::MessageParser<MoreString> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 10 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_MoreString__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<MoreString> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_MoreString__FieldAccessorTable; }
+    }
+
+    public MoreString() { }
+    public MoreString(MoreString other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private readonly pbc::RepeatedField<string> data_ = new pbc::RepeatedField<string>();
+    public pbc::RepeatedField<string> Data {
+      get { return data_; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as MoreString);
+    }
+
+    public bool Equals(MoreString other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if(!data_.Equals(other.data_)) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      hash ^= data_.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      output.WriteStringArray(1, fieldNames[0], data_);
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      {
+        int dataSize = 0;
+        foreach (string element in data_) {
+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);
+        }
+        size += dataSize;
+        size += 1 * data_.Count;
+      }
+      return size;
+    }
+    public void MergeFrom(MoreString other) {
+      if (other == null) {
+        return;
+      }
+      data_.Add(other.data_);
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            input.ReadStringArray(tag, fieldName, data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class OneBytes : pb::IMessage<OneBytes>, global::System.IEquatable<OneBytes> {
+    private static readonly pb::MessageParser<OneBytes> _parser = new pb::MessageParser<OneBytes>(() => new OneBytes());
+    public static pb::MessageParser<OneBytes> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 10 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_OneBytes__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<OneBytes> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_OneBytes__FieldAccessorTable; }
+    }
+
+    public OneBytes() { }
+    public OneBytes(OneBytes other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private pb::ByteString data_ = pb::ByteString.Empty;
+    public pb::ByteString Data {
+      get { return data_; }
+      set { data_ = value ?? pb::ByteString.Empty; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as OneBytes);
+    }
+
+    public bool Equals(OneBytes other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Data != other.Data) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Data != pb::ByteString.Empty) hash ^= Data.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Data != pb::ByteString.Empty) {
+        output.WriteBytes(1, fieldNames[0], Data);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Data != pb::ByteString.Empty) {
+        size += pb::CodedOutputStream.ComputeBytesSize(1, Data);
+      }
+      return size;
+    }
+    public void MergeFrom(OneBytes other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Data != pb::ByteString.Empty) {
+        Data = other.Data;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            input.ReadBytes(ref data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class MoreBytes : pb::IMessage<MoreBytes>, global::System.IEquatable<MoreBytes> {
+    private static readonly pb::MessageParser<MoreBytes> _parser = new pb::MessageParser<MoreBytes>(() => new MoreBytes());
+    public static pb::MessageParser<MoreBytes> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 10 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_MoreBytes__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<MoreBytes> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_MoreBytes__FieldAccessorTable; }
+    }
+
+    public MoreBytes() { }
+    public MoreBytes(MoreBytes other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private pb::ByteString data_ = pb::ByteString.Empty;
+    public pb::ByteString Data {
+      get { return data_; }
+      set { data_ = value ?? pb::ByteString.Empty; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as MoreBytes);
+    }
+
+    public bool Equals(MoreBytes other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Data != other.Data) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Data != pb::ByteString.Empty) hash ^= Data.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Data != pb::ByteString.Empty) {
+        output.WriteBytes(1, fieldNames[0], Data);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Data != pb::ByteString.Empty) {
+        size += pb::CodedOutputStream.ComputeBytesSize(1, Data);
+      }
+      return size;
+    }
+    public void MergeFrom(MoreBytes other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Data != pb::ByteString.Empty) {
+        Data = other.Data;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            input.ReadBytes(ref data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class Int32Message : pb::IMessage<Int32Message>, global::System.IEquatable<Int32Message> {
+    private static readonly pb::MessageParser<Int32Message> _parser = new pb::MessageParser<Int32Message>(() => new Int32Message());
+    public static pb::MessageParser<Int32Message> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Int32Message__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<Int32Message> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Int32Message__FieldAccessorTable; }
+    }
+
+    public Int32Message() { }
+    public Int32Message(Int32Message other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private int data_;
+    public int Data {
+      get { return data_; }
+      set { data_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as Int32Message);
+    }
+
+    public bool Equals(Int32Message other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Data != other.Data) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Data != 0) hash ^= Data.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Data != 0) {
+        output.WriteInt32(1, fieldNames[0], Data);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Data != 0) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, Data);
+      }
+      return size;
+    }
+    public void MergeFrom(Int32Message other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Data != 0) {
+        Data = other.Data;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt32(ref data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class Uint32Message : pb::IMessage<Uint32Message>, global::System.IEquatable<Uint32Message> {
+    private static readonly pb::MessageParser<Uint32Message> _parser = new pb::MessageParser<Uint32Message>(() => new Uint32Message());
+    public static pb::MessageParser<Uint32Message> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Uint32Message__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<Uint32Message> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Uint32Message__FieldAccessorTable; }
+    }
+
+    public Uint32Message() { }
+    public Uint32Message(Uint32Message other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private uint data_;
+    public uint Data {
+      get { return data_; }
+      set { data_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as Uint32Message);
+    }
+
+    public bool Equals(Uint32Message other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Data != other.Data) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Data != 0) hash ^= Data.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Data != 0) {
+        output.WriteUInt32(1, fieldNames[0], Data);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Data != 0) {
+        size += pb::CodedOutputStream.ComputeUInt32Size(1, Data);
+      }
+      return size;
+    }
+    public void MergeFrom(Uint32Message other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Data != 0) {
+        Data = other.Data;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadUInt32(ref data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class Int64Message : pb::IMessage<Int64Message>, global::System.IEquatable<Int64Message> {
+    private static readonly pb::MessageParser<Int64Message> _parser = new pb::MessageParser<Int64Message>(() => new Int64Message());
+    public static pb::MessageParser<Int64Message> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Int64Message__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<Int64Message> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Int64Message__FieldAccessorTable; }
+    }
+
+    public Int64Message() { }
+    public Int64Message(Int64Message other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private long data_;
+    public long Data {
+      get { return data_; }
+      set { data_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as Int64Message);
+    }
+
+    public bool Equals(Int64Message other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Data != other.Data) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Data != 0L) hash ^= Data.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Data != 0L) {
+        output.WriteInt64(1, fieldNames[0], Data);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Data != 0L) {
+        size += pb::CodedOutputStream.ComputeInt64Size(1, Data);
+      }
+      return size;
+    }
+    public void MergeFrom(Int64Message other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Data != 0L) {
+        Data = other.Data;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadInt64(ref data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class Uint64Message : pb::IMessage<Uint64Message>, global::System.IEquatable<Uint64Message> {
+    private static readonly pb::MessageParser<Uint64Message> _parser = new pb::MessageParser<Uint64Message>(() => new Uint64Message());
+    public static pb::MessageParser<Uint64Message> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Uint64Message__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<Uint64Message> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_Uint64Message__FieldAccessorTable; }
+    }
+
+    public Uint64Message() { }
+    public Uint64Message(Uint64Message other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private ulong data_;
+    public ulong Data {
+      get { return data_; }
+      set { data_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as Uint64Message);
+    }
+
+    public bool Equals(Uint64Message other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Data != other.Data) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Data != 0UL) hash ^= Data.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Data != 0UL) {
+        output.WriteUInt64(1, fieldNames[0], Data);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Data != 0UL) {
+        size += pb::CodedOutputStream.ComputeUInt64Size(1, Data);
+      }
+      return size;
+    }
+    public void MergeFrom(Uint64Message other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Data != 0UL) {
+        Data = other.Data;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadUInt64(ref data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class BoolMessage : pb::IMessage<BoolMessage>, global::System.IEquatable<BoolMessage> {
+    private static readonly pb::MessageParser<BoolMessage> _parser = new pb::MessageParser<BoolMessage>(() => new BoolMessage());
+    public static pb::MessageParser<BoolMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "data" };
+    private static readonly uint[] _fieldTags = new uint[] { 8 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BoolMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<BoolMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BoolMessage__FieldAccessorTable; }
+    }
+
+    public BoolMessage() { }
+    public BoolMessage(BoolMessage other) {
+      MergeFrom(other);
+    }
+    public const int DataFieldNumber = 1;
+    private bool data_;
+    public bool Data {
+      get { return data_; }
+      set { data_ = value; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as BoolMessage);
+    }
+
+    public bool Equals(BoolMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Data != other.Data) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (Data != false) hash ^= Data.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (Data != false) {
+        output.WriteBool(1, fieldNames[0], Data);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Data != false) {
+        size += pb::CodedOutputStream.ComputeBoolSize(1, Data);
+      }
+      return size;
+    }
+    public void MergeFrom(BoolMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Data != false) {
+        Data = other.Data;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            input.ReadBool(ref data_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestOneof : pb::IMessage<TestOneof>, global::System.IEquatable<TestOneof> {
+    private static readonly pb::MessageParser<TestOneof> _parser = new pb::MessageParser<TestOneof>(() => new TestOneof());
+    public static pb::MessageParser<TestOneof> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "foo_int", "foo_message", "foo_string" };
+    private static readonly uint[] _fieldTags = new uint[] { 8, 26, 18 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestOneof__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestOneof> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestOneof__FieldAccessorTable; }
+    }
+
+    public TestOneof() { }
+    public TestOneof(TestOneof other) {
+      MergeFrom(other);
+    }
+    public const int FooIntFieldNumber = 1;
+    public int FooInt {
+      get { return fooCase_ == FooOneofCase.FooInt ? (int) foo_ : 0; }
+      set {
+        foo_ = value;
+        fooCase_ = FooOneofCase.FooInt;
+      }
+    }
+
+    public const int FooStringFieldNumber = 2;
+    public string FooString {
+      get { return fooCase_ == FooOneofCase.FooString ? (string) foo_ : ""; }
+      set {
+        foo_ = value ?? "";
+        fooCase_ = value == null ? FooOneofCase.None : FooOneofCase.FooString;
+      }
+    }
+
+    public const int FooMessageFieldNumber = 3;
+    public global::Google.Protobuf.TestProtos.TestAllTypes FooMessage {
+      get { return fooCase_ == FooOneofCase.FooMessage ? (global::Google.Protobuf.TestProtos.TestAllTypes) foo_ : null; }
+      set {
+        foo_ = value;
+        fooCase_ = value == null ? FooOneofCase.None : FooOneofCase.FooMessage;
+      }
+    }
+
+    private object foo_;
+    public enum FooOneofCase {
+      None = 0,
+      FooInt = 1,
+      FooString = 2,
+      FooMessage = 3,
+    }
+    private FooOneofCase fooCase_ = FooOneofCase.None;
+    public FooOneofCase FooCase {
+      get { return fooCase_; }
+    }
+
+    public void ClearFoo() {
+      fooCase_ = FooOneofCase.None;
+      foo_ = null;
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestOneof);
+    }
+
+    public bool Equals(TestOneof other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (FooInt != other.FooInt) return false;
+      if (FooString != other.FooString) return false;
+      if (!object.Equals(FooMessage, other.FooMessage)) return false;  return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (fooCase_ == FooOneofCase.FooInt) hash ^= FooInt.GetHashCode();
+      if (fooCase_ == FooOneofCase.FooString) hash ^= FooString.GetHashCode();
+      if (fooCase_ == FooOneofCase.FooMessage) hash ^= FooMessage.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (fooCase_ == FooOneofCase.FooInt) {
+        output.WriteInt32(1, fieldNames[0], FooInt);
+      }
+      if (fooCase_ == FooOneofCase.FooString) {
+        output.WriteString(2, fieldNames[2], FooString);
+      }
+      if (fooCase_ == FooOneofCase.FooMessage) {
+        output.WriteMessage(3, fieldNames[1], FooMessage);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (fooCase_ == FooOneofCase.FooInt) {
+        size += pb::CodedOutputStream.ComputeInt32Size(1, FooInt);
+      }
+      if (fooCase_ == FooOneofCase.FooString) {
+        size += pb::CodedOutputStream.ComputeStringSize(2, FooString);
+      }
+      if (fooCase_ == FooOneofCase.FooMessage) {
+        size += pb::CodedOutputStream.ComputeMessageSize(3, FooMessage);
+      }
+      return size;
+    }
+    public void MergeFrom(TestOneof other) {
+      if (other == null) {
+        return;
+      }
+      switch (other.FooCase) {
+        case FooOneofCase.FooInt:
+          FooInt = other.FooInt;
+          break;
+        case FooOneofCase.FooString:
+          FooString = other.FooString;
+          break;
+        case FooOneofCase.FooMessage:
+          FooMessage = other.FooMessage;
+          break;
+      }
+
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 8: {
+            int value = 0;
+            if (input.ReadInt32(ref value)) {
+              foo_ = value;
+              fooCase_ = FooOneofCase.FooInt;
+            }
+            break;
+          }
+          case 18: {
+            string value = "";
+            if (input.ReadString(ref value)) {
+              foo_ = value;
+              fooCase_ = FooOneofCase.FooString;
+            }
+            break;
+          }
+          case 26: {
+            global::Google.Protobuf.TestProtos.TestAllTypes subBuilder = new global::Google.Protobuf.TestProtos.TestAllTypes();
+            if (fooCase_ == FooOneofCase.FooMessage) {
+              subBuilder.MergeFrom(FooMessage);
+            }
+            input.ReadMessage(subBuilder);
+            FooMessage = subBuilder;
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestPackedTypes : pb::IMessage<TestPackedTypes>, global::System.IEquatable<TestPackedTypes> {
+    private static readonly pb::MessageParser<TestPackedTypes> _parser = new pb::MessageParser<TestPackedTypes>(() => new TestPackedTypes());
+    public static pb::MessageParser<TestPackedTypes> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "packed_bool", "packed_double", "packed_enum", "packed_fixed32", "packed_fixed64", "packed_float", "packed_int32", "packed_int64", "packed_sfixed32", "packed_sfixed64", "packed_sint32", "packed_sint64", "packed_uint32", "packed_uint64" };
+    private static readonly uint[] _fieldTags = new uint[] { 818, 810, 826, 770, 778, 802, 722, 730, 786, 794, 754, 762, 738, 746 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestPackedTypes__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestPackedTypes> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable; }
+    }
+
+    public TestPackedTypes() { }
+    public TestPackedTypes(TestPackedTypes other) {
+      MergeFrom(other);
+    }
+    public const int PackedInt32FieldNumber = 90;
+    private readonly pbc::RepeatedField<int> packedInt32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> PackedInt32 {
+      get { return packedInt32_; }
+    }
+
+    public const int PackedInt64FieldNumber = 91;
+    private readonly pbc::RepeatedField<long> packedInt64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> PackedInt64 {
+      get { return packedInt64_; }
+    }
+
+    public const int PackedUint32FieldNumber = 92;
+    private readonly pbc::RepeatedField<uint> packedUint32_ = new pbc::RepeatedField<uint>();
+    public pbc::RepeatedField<uint> PackedUint32 {
+      get { return packedUint32_; }
+    }
+
+    public const int PackedUint64FieldNumber = 93;
+    private readonly pbc::RepeatedField<ulong> packedUint64_ = new pbc::RepeatedField<ulong>();
+    public pbc::RepeatedField<ulong> PackedUint64 {
+      get { return packedUint64_; }
+    }
+
+    public const int PackedSint32FieldNumber = 94;
+    private readonly pbc::RepeatedField<int> packedSint32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> PackedSint32 {
+      get { return packedSint32_; }
+    }
+
+    public const int PackedSint64FieldNumber = 95;
+    private readonly pbc::RepeatedField<long> packedSint64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> PackedSint64 {
+      get { return packedSint64_; }
+    }
+
+    public const int PackedFixed32FieldNumber = 96;
+    private readonly pbc::RepeatedField<uint> packedFixed32_ = new pbc::RepeatedField<uint>();
+    public pbc::RepeatedField<uint> PackedFixed32 {
+      get { return packedFixed32_; }
+    }
+
+    public const int PackedFixed64FieldNumber = 97;
+    private readonly pbc::RepeatedField<ulong> packedFixed64_ = new pbc::RepeatedField<ulong>();
+    public pbc::RepeatedField<ulong> PackedFixed64 {
+      get { return packedFixed64_; }
+    }
+
+    public const int PackedSfixed32FieldNumber = 98;
+    private readonly pbc::RepeatedField<int> packedSfixed32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> PackedSfixed32 {
+      get { return packedSfixed32_; }
+    }
+
+    public const int PackedSfixed64FieldNumber = 99;
+    private readonly pbc::RepeatedField<long> packedSfixed64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> PackedSfixed64 {
+      get { return packedSfixed64_; }
+    }
+
+    public const int PackedFloatFieldNumber = 100;
+    private readonly pbc::RepeatedField<float> packedFloat_ = new pbc::RepeatedField<float>();
+    public pbc::RepeatedField<float> PackedFloat {
+      get { return packedFloat_; }
+    }
+
+    public const int PackedDoubleFieldNumber = 101;
+    private readonly pbc::RepeatedField<double> packedDouble_ = new pbc::RepeatedField<double>();
+    public pbc::RepeatedField<double> PackedDouble {
+      get { return packedDouble_; }
+    }
+
+    public const int PackedBoolFieldNumber = 102;
+    private readonly pbc::RepeatedField<bool> packedBool_ = new pbc::RepeatedField<bool>();
+    public pbc::RepeatedField<bool> PackedBool {
+      get { return packedBool_; }
+    }
+
+    public const int PackedEnumFieldNumber = 103;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> packedEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> PackedEnum {
+      get { return packedEnum_; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestPackedTypes);
+    }
+
+    public bool Equals(TestPackedTypes other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if(!packedInt32_.Equals(other.packedInt32_)) return false;
+      if(!packedInt64_.Equals(other.packedInt64_)) return false;
+      if(!packedUint32_.Equals(other.packedUint32_)) return false;
+      if(!packedUint64_.Equals(other.packedUint64_)) return false;
+      if(!packedSint32_.Equals(other.packedSint32_)) return false;
+      if(!packedSint64_.Equals(other.packedSint64_)) return false;
+      if(!packedFixed32_.Equals(other.packedFixed32_)) return false;
+      if(!packedFixed64_.Equals(other.packedFixed64_)) return false;
+      if(!packedSfixed32_.Equals(other.packedSfixed32_)) return false;
+      if(!packedSfixed64_.Equals(other.packedSfixed64_)) return false;
+      if(!packedFloat_.Equals(other.packedFloat_)) return false;
+      if(!packedDouble_.Equals(other.packedDouble_)) return false;
+      if(!packedBool_.Equals(other.packedBool_)) return false;
+      if(!packedEnum_.Equals(other.packedEnum_)) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      hash ^= packedInt32_.GetHashCode();
+      hash ^= packedInt64_.GetHashCode();
+      hash ^= packedUint32_.GetHashCode();
+      hash ^= packedUint64_.GetHashCode();
+      hash ^= packedSint32_.GetHashCode();
+      hash ^= packedSint64_.GetHashCode();
+      hash ^= packedFixed32_.GetHashCode();
+      hash ^= packedFixed64_.GetHashCode();
+      hash ^= packedSfixed32_.GetHashCode();
+      hash ^= packedSfixed64_.GetHashCode();
+      hash ^= packedFloat_.GetHashCode();
+      hash ^= packedDouble_.GetHashCode();
+      hash ^= packedBool_.GetHashCode();
+      hash ^= packedEnum_.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      output.WritePackedInt32Array(90, fieldNames[6], packedInt32_);
+      output.WritePackedInt64Array(91, fieldNames[7], packedInt64_);
+      output.WritePackedUInt32Array(92, fieldNames[12], packedUint32_);
+      output.WritePackedUInt64Array(93, fieldNames[13], packedUint64_);
+      output.WritePackedSInt32Array(94, fieldNames[10], packedSint32_);
+      output.WritePackedSInt64Array(95, fieldNames[11], packedSint64_);
+      output.WritePackedFixed32Array(96, fieldNames[3], packedFixed32_);
+      output.WritePackedFixed64Array(97, fieldNames[4], packedFixed64_);
+      output.WritePackedSFixed32Array(98, fieldNames[8], packedSfixed32_);
+      output.WritePackedSFixed64Array(99, fieldNames[9], packedSfixed64_);
+      output.WritePackedFloatArray(100, fieldNames[5], packedFloat_);
+      output.WritePackedDoubleArray(101, fieldNames[1], packedDouble_);
+      output.WritePackedBoolArray(102, fieldNames[0], packedBool_);
+      output.WritePackedEnumArray(103, fieldNames[2], packedEnum_);
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      {
+        int dataSize = 0;
+        foreach (int element in packedInt32_) {
+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (packedInt32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (long element in packedInt64_) {
+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        if (packedInt64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (uint element in packedUint32_) {
+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (packedUint32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (ulong element in packedUint64_) {
+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        if (packedUint64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (int element in packedSint32_) {
+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (packedSint32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (long element in packedSint64_) {
+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        if (packedSint64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * packedFixed32_.Count;
+        size += dataSize;
+        if (packedFixed32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * packedFixed64_.Count;
+        size += dataSize;
+        if (packedFixed64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * packedSfixed32_.Count;
+        size += dataSize;
+        if (packedSfixed32_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * packedSfixed64_.Count;
+        size += dataSize;
+        if (packedSfixed64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * packedFloat_.Count;
+        size += dataSize;
+        if (packedFloat_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * packedDouble_.Count;
+        size += dataSize;
+        if (packedDouble_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 1 * packedBool_.Count;
+        size += dataSize;
+        if (packedBool_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        if (packedEnum_.Count > 0) {
+          foreach (global::Google.Protobuf.TestProtos.ForeignEnum element in packedEnum_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2;
+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
+        }
+      }
+      return size;
+    }
+    public void MergeFrom(TestPackedTypes other) {
+      if (other == null) {
+        return;
+      }
+      packedInt32_.Add(other.packedInt32_);
+      packedInt64_.Add(other.packedInt64_);
+      packedUint32_.Add(other.packedUint32_);
+      packedUint64_.Add(other.packedUint64_);
+      packedSint32_.Add(other.packedSint32_);
+      packedSint64_.Add(other.packedSint64_);
+      packedFixed32_.Add(other.packedFixed32_);
+      packedFixed64_.Add(other.packedFixed64_);
+      packedSfixed32_.Add(other.packedSfixed32_);
+      packedSfixed64_.Add(other.packedSfixed64_);
+      packedFloat_.Add(other.packedFloat_);
+      packedDouble_.Add(other.packedDouble_);
+      packedBool_.Add(other.packedBool_);
+      packedEnum_.Add(other.packedEnum_);
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 722:
+          case 720: {
+            input.ReadInt32Array(tag, fieldName, packedInt32_);
+            break;
+          }
+          case 730:
+          case 728: {
+            input.ReadInt64Array(tag, fieldName, packedInt64_);
+            break;
+          }
+          case 738:
+          case 736: {
+            input.ReadUInt32Array(tag, fieldName, packedUint32_);
+            break;
+          }
+          case 746:
+          case 744: {
+            input.ReadUInt64Array(tag, fieldName, packedUint64_);
+            break;
+          }
+          case 754:
+          case 752: {
+            input.ReadSInt32Array(tag, fieldName, packedSint32_);
+            break;
+          }
+          case 762:
+          case 760: {
+            input.ReadSInt64Array(tag, fieldName, packedSint64_);
+            break;
+          }
+          case 770:
+          case 773: {
+            input.ReadFixed32Array(tag, fieldName, packedFixed32_);
+            break;
+          }
+          case 778:
+          case 777: {
+            input.ReadFixed64Array(tag, fieldName, packedFixed64_);
+            break;
+          }
+          case 786:
+          case 789: {
+            input.ReadSFixed32Array(tag, fieldName, packedSfixed32_);
+            break;
+          }
+          case 794:
+          case 793: {
+            input.ReadSFixed64Array(tag, fieldName, packedSfixed64_);
+            break;
+          }
+          case 802:
+          case 805: {
+            input.ReadFloatArray(tag, fieldName, packedFloat_);
+            break;
+          }
+          case 810:
+          case 809: {
+            input.ReadDoubleArray(tag, fieldName, packedDouble_);
+            break;
+          }
+          case 818:
+          case 816: {
+            input.ReadBoolArray(tag, fieldName, packedBool_);
+            break;
+          }
+          case 826:
+          case 824: {
+            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ForeignEnum>(tag, fieldName, packedEnum_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestUnpackedTypes : pb::IMessage<TestUnpackedTypes>, global::System.IEquatable<TestUnpackedTypes> {
+    private static readonly pb::MessageParser<TestUnpackedTypes> _parser = new pb::MessageParser<TestUnpackedTypes>(() => new TestUnpackedTypes());
+    public static pb::MessageParser<TestUnpackedTypes> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "unpacked_bool", "unpacked_double", "unpacked_enum", "unpacked_fixed32", "unpacked_fixed64", "unpacked_float", "unpacked_int32", "unpacked_int64", "unpacked_sfixed32", "unpacked_sfixed64", "unpacked_sint32", "unpacked_sint64", "unpacked_uint32", "unpacked_uint64" };
+    private static readonly uint[] _fieldTags = new uint[] { 816, 809, 824, 773, 777, 805, 720, 728, 789, 793, 752, 760, 736, 744 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestUnpackedTypes> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable; }
+    }
+
+    public TestUnpackedTypes() { }
+    public TestUnpackedTypes(TestUnpackedTypes other) {
+      MergeFrom(other);
+    }
+    public const int UnpackedInt32FieldNumber = 90;
+    private readonly pbc::RepeatedField<int> unpackedInt32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> UnpackedInt32 {
+      get { return unpackedInt32_; }
+    }
+
+    public const int UnpackedInt64FieldNumber = 91;
+    private readonly pbc::RepeatedField<long> unpackedInt64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> UnpackedInt64 {
+      get { return unpackedInt64_; }
+    }
+
+    public const int UnpackedUint32FieldNumber = 92;
+    private readonly pbc::RepeatedField<uint> unpackedUint32_ = new pbc::RepeatedField<uint>();
+    public pbc::RepeatedField<uint> UnpackedUint32 {
+      get { return unpackedUint32_; }
+    }
+
+    public const int UnpackedUint64FieldNumber = 93;
+    private readonly pbc::RepeatedField<ulong> unpackedUint64_ = new pbc::RepeatedField<ulong>();
+    public pbc::RepeatedField<ulong> UnpackedUint64 {
+      get { return unpackedUint64_; }
+    }
+
+    public const int UnpackedSint32FieldNumber = 94;
+    private readonly pbc::RepeatedField<int> unpackedSint32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> UnpackedSint32 {
+      get { return unpackedSint32_; }
+    }
+
+    public const int UnpackedSint64FieldNumber = 95;
+    private readonly pbc::RepeatedField<long> unpackedSint64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> UnpackedSint64 {
+      get { return unpackedSint64_; }
+    }
+
+    public const int UnpackedFixed32FieldNumber = 96;
+    private readonly pbc::RepeatedField<uint> unpackedFixed32_ = new pbc::RepeatedField<uint>();
+    public pbc::RepeatedField<uint> UnpackedFixed32 {
+      get { return unpackedFixed32_; }
+    }
+
+    public const int UnpackedFixed64FieldNumber = 97;
+    private readonly pbc::RepeatedField<ulong> unpackedFixed64_ = new pbc::RepeatedField<ulong>();
+    public pbc::RepeatedField<ulong> UnpackedFixed64 {
+      get { return unpackedFixed64_; }
+    }
+
+    public const int UnpackedSfixed32FieldNumber = 98;
+    private readonly pbc::RepeatedField<int> unpackedSfixed32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> UnpackedSfixed32 {
+      get { return unpackedSfixed32_; }
+    }
+
+    public const int UnpackedSfixed64FieldNumber = 99;
+    private readonly pbc::RepeatedField<long> unpackedSfixed64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> UnpackedSfixed64 {
+      get { return unpackedSfixed64_; }
+    }
+
+    public const int UnpackedFloatFieldNumber = 100;
+    private readonly pbc::RepeatedField<float> unpackedFloat_ = new pbc::RepeatedField<float>();
+    public pbc::RepeatedField<float> UnpackedFloat {
+      get { return unpackedFloat_; }
+    }
+
+    public const int UnpackedDoubleFieldNumber = 101;
+    private readonly pbc::RepeatedField<double> unpackedDouble_ = new pbc::RepeatedField<double>();
+    public pbc::RepeatedField<double> UnpackedDouble {
+      get { return unpackedDouble_; }
+    }
+
+    public const int UnpackedBoolFieldNumber = 102;
+    private readonly pbc::RepeatedField<bool> unpackedBool_ = new pbc::RepeatedField<bool>();
+    public pbc::RepeatedField<bool> UnpackedBool {
+      get { return unpackedBool_; }
+    }
+
+    public const int UnpackedEnumFieldNumber = 103;
+    private readonly pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> unpackedEnum_ = new pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum>();
+    public pbc::RepeatedField<global::Google.Protobuf.TestProtos.ForeignEnum> UnpackedEnum {
+      get { return unpackedEnum_; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestUnpackedTypes);
+    }
+
+    public bool Equals(TestUnpackedTypes other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if(!unpackedInt32_.Equals(other.unpackedInt32_)) return false;
+      if(!unpackedInt64_.Equals(other.unpackedInt64_)) return false;
+      if(!unpackedUint32_.Equals(other.unpackedUint32_)) return false;
+      if(!unpackedUint64_.Equals(other.unpackedUint64_)) return false;
+      if(!unpackedSint32_.Equals(other.unpackedSint32_)) return false;
+      if(!unpackedSint64_.Equals(other.unpackedSint64_)) return false;
+      if(!unpackedFixed32_.Equals(other.unpackedFixed32_)) return false;
+      if(!unpackedFixed64_.Equals(other.unpackedFixed64_)) return false;
+      if(!unpackedSfixed32_.Equals(other.unpackedSfixed32_)) return false;
+      if(!unpackedSfixed64_.Equals(other.unpackedSfixed64_)) return false;
+      if(!unpackedFloat_.Equals(other.unpackedFloat_)) return false;
+      if(!unpackedDouble_.Equals(other.unpackedDouble_)) return false;
+      if(!unpackedBool_.Equals(other.unpackedBool_)) return false;
+      if(!unpackedEnum_.Equals(other.unpackedEnum_)) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      hash ^= unpackedInt32_.GetHashCode();
+      hash ^= unpackedInt64_.GetHashCode();
+      hash ^= unpackedUint32_.GetHashCode();
+      hash ^= unpackedUint64_.GetHashCode();
+      hash ^= unpackedSint32_.GetHashCode();
+      hash ^= unpackedSint64_.GetHashCode();
+      hash ^= unpackedFixed32_.GetHashCode();
+      hash ^= unpackedFixed64_.GetHashCode();
+      hash ^= unpackedSfixed32_.GetHashCode();
+      hash ^= unpackedSfixed64_.GetHashCode();
+      hash ^= unpackedFloat_.GetHashCode();
+      hash ^= unpackedDouble_.GetHashCode();
+      hash ^= unpackedBool_.GetHashCode();
+      hash ^= unpackedEnum_.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      output.WriteInt32Array(90, fieldNames[6], unpackedInt32_);
+      output.WriteInt64Array(91, fieldNames[7], unpackedInt64_);
+      output.WriteUInt32Array(92, fieldNames[12], unpackedUint32_);
+      output.WriteUInt64Array(93, fieldNames[13], unpackedUint64_);
+      output.WriteSInt32Array(94, fieldNames[10], unpackedSint32_);
+      output.WriteSInt64Array(95, fieldNames[11], unpackedSint64_);
+      output.WriteFixed32Array(96, fieldNames[3], unpackedFixed32_);
+      output.WriteFixed64Array(97, fieldNames[4], unpackedFixed64_);
+      output.WriteSFixed32Array(98, fieldNames[8], unpackedSfixed32_);
+      output.WriteSFixed64Array(99, fieldNames[9], unpackedSfixed64_);
+      output.WriteFloatArray(100, fieldNames[5], unpackedFloat_);
+      output.WriteDoubleArray(101, fieldNames[1], unpackedDouble_);
+      output.WriteBoolArray(102, fieldNames[0], unpackedBool_);
+      output.WriteEnumArray(103, fieldNames[2], unpackedEnum_);
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      {
+        int dataSize = 0;
+        foreach (int element in unpackedInt32_) {
+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        size += 2 * unpackedInt32_.Count;
+      }
+      {
+        int dataSize = 0;
+        foreach (long element in unpackedInt64_) {
+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        size += 2 * unpackedInt64_.Count;
+      }
+      {
+        int dataSize = 0;
+        foreach (uint element in unpackedUint32_) {
+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        size += 2 * unpackedUint32_.Count;
+      }
+      {
+        int dataSize = 0;
+        foreach (ulong element in unpackedUint64_) {
+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        size += 2 * unpackedUint64_.Count;
+      }
+      {
+        int dataSize = 0;
+        foreach (int element in unpackedSint32_) {
+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        size += 2 * unpackedSint32_.Count;
+      }
+      {
+        int dataSize = 0;
+        foreach (long element in unpackedSint64_) {
+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        size += 2 * unpackedSint64_.Count;
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * unpackedFixed32_.Count;
+        size += dataSize;
+        size += 2 * unpackedFixed32_.Count;
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * unpackedFixed64_.Count;
+        size += dataSize;
+        size += 2 * unpackedFixed64_.Count;
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * unpackedSfixed32_.Count;
+        size += dataSize;
+        size += 2 * unpackedSfixed32_.Count;
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * unpackedSfixed64_.Count;
+        size += dataSize;
+        size += 2 * unpackedSfixed64_.Count;
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * unpackedFloat_.Count;
+        size += dataSize;
+        size += 2 * unpackedFloat_.Count;
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * unpackedDouble_.Count;
+        size += dataSize;
+        size += 2 * unpackedDouble_.Count;
+      }
+      {
+        int dataSize = 0;
+        dataSize = 1 * unpackedBool_.Count;
+        size += dataSize;
+        size += 2 * unpackedBool_.Count;
+      }
+      {
+        int dataSize = 0;
+        if (unpackedEnum_.Count > 0) {
+          foreach (global::Google.Protobuf.TestProtos.ForeignEnum element in unpackedEnum_) {
+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag(element);
+          }
+          size += dataSize;
+          size += 2 * unpackedEnum_.Count;
+        }
+      }
+      return size;
+    }
+    public void MergeFrom(TestUnpackedTypes other) {
+      if (other == null) {
+        return;
+      }
+      unpackedInt32_.Add(other.unpackedInt32_);
+      unpackedInt64_.Add(other.unpackedInt64_);
+      unpackedUint32_.Add(other.unpackedUint32_);
+      unpackedUint64_.Add(other.unpackedUint64_);
+      unpackedSint32_.Add(other.unpackedSint32_);
+      unpackedSint64_.Add(other.unpackedSint64_);
+      unpackedFixed32_.Add(other.unpackedFixed32_);
+      unpackedFixed64_.Add(other.unpackedFixed64_);
+      unpackedSfixed32_.Add(other.unpackedSfixed32_);
+      unpackedSfixed64_.Add(other.unpackedSfixed64_);
+      unpackedFloat_.Add(other.unpackedFloat_);
+      unpackedDouble_.Add(other.unpackedDouble_);
+      unpackedBool_.Add(other.unpackedBool_);
+      unpackedEnum_.Add(other.unpackedEnum_);
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 722:
+          case 720: {
+            input.ReadInt32Array(tag, fieldName, unpackedInt32_);
+            break;
+          }
+          case 730:
+          case 728: {
+            input.ReadInt64Array(tag, fieldName, unpackedInt64_);
+            break;
+          }
+          case 738:
+          case 736: {
+            input.ReadUInt32Array(tag, fieldName, unpackedUint32_);
+            break;
+          }
+          case 746:
+          case 744: {
+            input.ReadUInt64Array(tag, fieldName, unpackedUint64_);
+            break;
+          }
+          case 754:
+          case 752: {
+            input.ReadSInt32Array(tag, fieldName, unpackedSint32_);
+            break;
+          }
+          case 762:
+          case 760: {
+            input.ReadSInt64Array(tag, fieldName, unpackedSint64_);
+            break;
+          }
+          case 770:
+          case 773: {
+            input.ReadFixed32Array(tag, fieldName, unpackedFixed32_);
+            break;
+          }
+          case 778:
+          case 777: {
+            input.ReadFixed64Array(tag, fieldName, unpackedFixed64_);
+            break;
+          }
+          case 786:
+          case 789: {
+            input.ReadSFixed32Array(tag, fieldName, unpackedSfixed32_);
+            break;
+          }
+          case 794:
+          case 793: {
+            input.ReadSFixed64Array(tag, fieldName, unpackedSfixed64_);
+            break;
+          }
+          case 802:
+          case 805: {
+            input.ReadFloatArray(tag, fieldName, unpackedFloat_);
+            break;
+          }
+          case 810:
+          case 809: {
+            input.ReadDoubleArray(tag, fieldName, unpackedDouble_);
+            break;
+          }
+          case 818:
+          case 816: {
+            input.ReadBoolArray(tag, fieldName, unpackedBool_);
+            break;
+          }
+          case 826:
+          case 824: {
+            input.ReadEnumArray<global::Google.Protobuf.TestProtos.ForeignEnum>(tag, fieldName, unpackedEnum_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestRepeatedScalarDifferentTagSizes : pb::IMessage<TestRepeatedScalarDifferentTagSizes>, global::System.IEquatable<TestRepeatedScalarDifferentTagSizes> {
+    private static readonly pb::MessageParser<TestRepeatedScalarDifferentTagSizes> _parser = new pb::MessageParser<TestRepeatedScalarDifferentTagSizes>(() => new TestRepeatedScalarDifferentTagSizes());
+    public static pb::MessageParser<TestRepeatedScalarDifferentTagSizes> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_int32", "repeated_int64", "repeated_uint64" };
+    private static readonly uint[] _fieldTags = new uint[] { 101, 16369, 2097141, 104, 16376, 2097144 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestRepeatedScalarDifferentTagSizes> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable; }
+    }
+
+    public TestRepeatedScalarDifferentTagSizes() { }
+    public TestRepeatedScalarDifferentTagSizes(TestRepeatedScalarDifferentTagSizes other) {
+      MergeFrom(other);
+    }
+    public const int RepeatedFixed32FieldNumber = 12;
+    private readonly pbc::RepeatedField<uint> repeatedFixed32_ = new pbc::RepeatedField<uint>();
+    public pbc::RepeatedField<uint> RepeatedFixed32 {
+      get { return repeatedFixed32_; }
+    }
+
+    public const int RepeatedInt32FieldNumber = 13;
+    private readonly pbc::RepeatedField<int> repeatedInt32_ = new pbc::RepeatedField<int>();
+    public pbc::RepeatedField<int> RepeatedInt32 {
+      get { return repeatedInt32_; }
+    }
+
+    public const int RepeatedFixed64FieldNumber = 2046;
+    private readonly pbc::RepeatedField<ulong> repeatedFixed64_ = new pbc::RepeatedField<ulong>();
+    public pbc::RepeatedField<ulong> RepeatedFixed64 {
+      get { return repeatedFixed64_; }
+    }
+
+    public const int RepeatedInt64FieldNumber = 2047;
+    private readonly pbc::RepeatedField<long> repeatedInt64_ = new pbc::RepeatedField<long>();
+    public pbc::RepeatedField<long> RepeatedInt64 {
+      get { return repeatedInt64_; }
+    }
+
+    public const int RepeatedFloatFieldNumber = 262142;
+    private readonly pbc::RepeatedField<float> repeatedFloat_ = new pbc::RepeatedField<float>();
+    public pbc::RepeatedField<float> RepeatedFloat {
+      get { return repeatedFloat_; }
+    }
+
+    public const int RepeatedUint64FieldNumber = 262143;
+    private readonly pbc::RepeatedField<ulong> repeatedUint64_ = new pbc::RepeatedField<ulong>();
+    public pbc::RepeatedField<ulong> RepeatedUint64 {
+      get { return repeatedUint64_; }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as TestRepeatedScalarDifferentTagSizes);
+    }
+
+    public bool Equals(TestRepeatedScalarDifferentTagSizes other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if(!repeatedFixed32_.Equals(other.repeatedFixed32_)) return false;
+      if(!repeatedInt32_.Equals(other.repeatedInt32_)) return false;
+      if(!repeatedFixed64_.Equals(other.repeatedFixed64_)) return false;
+      if(!repeatedInt64_.Equals(other.repeatedInt64_)) return false;
+      if(!repeatedFloat_.Equals(other.repeatedFloat_)) return false;
+      if(!repeatedUint64_.Equals(other.repeatedUint64_)) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      hash ^= repeatedFixed32_.GetHashCode();
+      hash ^= repeatedInt32_.GetHashCode();
+      hash ^= repeatedFixed64_.GetHashCode();
+      hash ^= repeatedInt64_.GetHashCode();
+      hash ^= repeatedFloat_.GetHashCode();
+      hash ^= repeatedUint64_.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      output.WritePackedFixed32Array(12, fieldNames[0], repeatedFixed32_);
+      output.WritePackedInt32Array(13, fieldNames[3], repeatedInt32_);
+      output.WritePackedFixed64Array(2046, fieldNames[1], repeatedFixed64_);
+      output.WritePackedInt64Array(2047, fieldNames[4], repeatedInt64_);
+      output.WritePackedFloatArray(262142, fieldNames[2], repeatedFloat_);
+      output.WritePackedUInt64Array(262143, fieldNames[5], repeatedUint64_);
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      {
+        int dataSize = 0;
+        dataSize = 4 * repeatedFixed32_.Count;
+        size += dataSize;
+        if (repeatedFixed32_.Count != 0) {
+          size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (int element in repeatedInt32_) {
+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedInt32_.Count != 0) {
+          size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 8 * repeatedFixed64_.Count;
+        size += dataSize;
+        if (repeatedFixed64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (long element in repeatedInt64_) {
+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedInt64_.Count != 0) {
+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * repeatedFloat_.Count;
+        size += dataSize;
+        if (repeatedFloat_.Count != 0) {
+          size += 3 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      {
+        int dataSize = 0;
+        foreach (ulong element in repeatedUint64_) {
+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);
+        }
+        size += dataSize;
+        if (repeatedUint64_.Count != 0) {
+          size += 3 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);
+        }
+      }
+      return size;
+    }
+    public void MergeFrom(TestRepeatedScalarDifferentTagSizes other) {
+      if (other == null) {
+        return;
+      }
+      repeatedFixed32_.Add(other.repeatedFixed32_);
+      repeatedInt32_.Add(other.repeatedInt32_);
+      repeatedFixed64_.Add(other.repeatedFixed64_);
+      repeatedInt64_.Add(other.repeatedInt64_);
+      repeatedFloat_.Add(other.repeatedFloat_);
+      repeatedUint64_.Add(other.repeatedUint64_);
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 98:
+          case 101: {
+            input.ReadFixed32Array(tag, fieldName, repeatedFixed32_);
+            break;
+          }
+          case 106:
+          case 104: {
+            input.ReadInt32Array(tag, fieldName, repeatedInt32_);
+            break;
+          }
+          case 16370:
+          case 16369: {
+            input.ReadFixed64Array(tag, fieldName, repeatedFixed64_);
+            break;
+          }
+          case 16378:
+          case 16376: {
+            input.ReadInt64Array(tag, fieldName, repeatedInt64_);
+            break;
+          }
+          case 2097138:
+          case 2097141: {
+            input.ReadFloatArray(tag, fieldName, repeatedFloat_);
+            break;
+          }
+          case 2097146:
+          case 2097144: {
+            input.ReadUInt64Array(tag, fieldName, repeatedUint64_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class TestCommentInjectionMessage : pb::IMessage<TestCommentInjectionMessage>, global::System.IEquatable<TestCommentInjectionMessage> {
+    private static readonly pb::MessageParser<TestCommentInjectionMessage> _parser = new pb::MessageParser<TestCommentInjectionMessage>(() => new TestCommentInjectionMessage());
+    public static pb::MessageParser<TestCommentInjectionMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] { "a" };
+    private static readonly uint[] _fieldTags = new uint[] { 10 };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestCommentInjectionMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<TestCommentInjectionMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_TestCommentInjectionMessage__FieldAccessorTable; }
+    }
+
+    public TestCommentInjectionMessage() { }
+    public TestCommentInjectionMessage(TestCommentInjectionMessage other) {
+      MergeFrom(other);
+    }
+    public const int AFieldNumber = 1;
+    private string a_ = "";
+    public string A {
+      get { return a_; }
+      set { a_ = value ?? ""; }
+    }
+
+
+    public override bool Equals(object other) {
+      return Equals(other as TestCommentInjectionMessage);
+    }
+
+    public bool Equals(TestCommentInjectionMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (A != other.A) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      if (A != "") hash ^= A.GetHashCode();
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+      if (A != "") {
+        output.WriteString(1, fieldNames[0], A);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (A != "") {
+        size += pb::CodedOutputStream.ComputeStringSize(1, A);
+      }
+      return size;
+    }
+    public void MergeFrom(TestCommentInjectionMessage other) {
+      if (other == null) {
+        return;
+      }
+      if (other.A != "") {
+        A = other.A;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+          case 10: {
+            input.ReadString(ref a_);
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class FooRequest : pb::IMessage<FooRequest>, global::System.IEquatable<FooRequest> {
+    private static readonly pb::MessageParser<FooRequest> _parser = new pb::MessageParser<FooRequest>(() => new FooRequest());
+    public static pb::MessageParser<FooRequest> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] {  };
+    private static readonly uint[] _fieldTags = new uint[] {  };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooRequest__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<FooRequest> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooRequest__FieldAccessorTable; }
+    }
+
+    public FooRequest() { }
+    public FooRequest(FooRequest other) {
+      MergeFrom(other);
+    }
+    public override bool Equals(object other) {
+      return Equals(other as FooRequest);
+    }
+
+    public bool Equals(FooRequest other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+    public void MergeFrom(FooRequest other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class FooResponse : pb::IMessage<FooResponse>, global::System.IEquatable<FooResponse> {
+    private static readonly pb::MessageParser<FooResponse> _parser = new pb::MessageParser<FooResponse>(() => new FooResponse());
+    public static pb::MessageParser<FooResponse> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] {  };
+    private static readonly uint[] _fieldTags = new uint[] {  };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooResponse__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<FooResponse> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooResponse__FieldAccessorTable; }
+    }
+
+    public FooResponse() { }
+    public FooResponse(FooResponse other) {
+      MergeFrom(other);
+    }
+    public override bool Equals(object other) {
+      return Equals(other as FooResponse);
+    }
+
+    public bool Equals(FooResponse other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+    public void MergeFrom(FooResponse other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class FooClientMessage : pb::IMessage<FooClientMessage>, global::System.IEquatable<FooClientMessage> {
+    private static readonly pb::MessageParser<FooClientMessage> _parser = new pb::MessageParser<FooClientMessage>(() => new FooClientMessage());
+    public static pb::MessageParser<FooClientMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] {  };
+    private static readonly uint[] _fieldTags = new uint[] {  };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooClientMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<FooClientMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooClientMessage__FieldAccessorTable; }
+    }
+
+    public FooClientMessage() { }
+    public FooClientMessage(FooClientMessage other) {
+      MergeFrom(other);
+    }
+    public override bool Equals(object other) {
+      return Equals(other as FooClientMessage);
+    }
+
+    public bool Equals(FooClientMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+    public void MergeFrom(FooClientMessage other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class FooServerMessage : pb::IMessage<FooServerMessage>, global::System.IEquatable<FooServerMessage> {
+    private static readonly pb::MessageParser<FooServerMessage> _parser = new pb::MessageParser<FooServerMessage>(() => new FooServerMessage());
+    public static pb::MessageParser<FooServerMessage> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] {  };
+    private static readonly uint[] _fieldTags = new uint[] {  };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooServerMessage__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<FooServerMessage> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_FooServerMessage__FieldAccessorTable; }
+    }
+
+    public FooServerMessage() { }
+    public FooServerMessage(FooServerMessage other) {
+      MergeFrom(other);
+    }
+    public override bool Equals(object other) {
+      return Equals(other as FooServerMessage);
+    }
+
+    public bool Equals(FooServerMessage other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+    public void MergeFrom(FooServerMessage other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class BarRequest : pb::IMessage<BarRequest>, global::System.IEquatable<BarRequest> {
+    private static readonly pb::MessageParser<BarRequest> _parser = new pb::MessageParser<BarRequest>(() => new BarRequest());
+    public static pb::MessageParser<BarRequest> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] {  };
+    private static readonly uint[] _fieldTags = new uint[] {  };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BarRequest__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<BarRequest> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BarRequest__FieldAccessorTable; }
+    }
+
+    public BarRequest() { }
+    public BarRequest(BarRequest other) {
+      MergeFrom(other);
+    }
+    public override bool Equals(object other) {
+      return Equals(other as BarRequest);
+    }
+
+    public bool Equals(BarRequest other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+    public void MergeFrom(BarRequest other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+        }
+      }
+    }
+
+  }
+
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class BarResponse : pb::IMessage<BarResponse>, global::System.IEquatable<BarResponse> {
+    private static readonly pb::MessageParser<BarResponse> _parser = new pb::MessageParser<BarResponse>(() => new BarResponse());
+    public static pb::MessageParser<BarResponse> Parser { get { return _parser; } }
+
+    private static readonly string[] _fieldNames = new string[] {  };
+    private static readonly uint[] _fieldTags = new uint[] {  };
+    public static pbd::MessageDescriptor Descriptor {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BarResponse__Descriptor; }
+    }
+
+    public pb::FieldAccess.FieldAccessorTable<BarResponse> Fields {
+      get { return global::Google.Protobuf.TestProtos.UnittestProto3.internal__static_protobuf_unittest_BarResponse__FieldAccessorTable; }
+    }
+
+    public BarResponse() { }
+    public BarResponse(BarResponse other) {
+      MergeFrom(other);
+    }
+    public override bool Equals(object other) {
+      return Equals(other as BarResponse);
+    }
+
+    public bool Equals(BarResponse other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 0;
+      return hash;
+    }
+
+    public void WriteTo(pb::ICodedOutputStream output) {
+      string[] fieldNames = _fieldNames;
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      return size;
+    }
+    public void MergeFrom(BarResponse other) {
+      if (other == null) {
+        return;
+      }
+    }
+
+    public void MergeFrom(pb::ICodedInputStream input) {
+      uint tag;
+      string fieldName;
+      while (input.ReadTag(out tag, out fieldName)) {
+        if (tag == 0 && fieldName != null) {
+          int fieldOrdinal = global::System.Array.BinarySearch(_fieldNames, fieldName, global::System.StringComparer.Ordinal);
+          if (fieldOrdinal >= 0) {
+            tag = _fieldTags[fieldOrdinal];
+          }
+        }
+        switch(tag) {
+          case 0:
+            throw pb::InvalidProtocolBufferException.InvalidTag();
+          default:
+            if (pb::WireFormat.IsEndGroupTag(tag)) {
+              return;
+            }
+            break;
+        }
+      }
+    }
+
+  }
+
+  #endregion
+
+}
+
+#endregion Designer generated code

+ 0 - 809
csharp/src/ProtocolBuffers.Test/TestProtos/UnknownEnumTest.cs

@@ -1,809 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/protobuf/unknown_enum_test.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
-using scg = global::System.Collections.Generic;
-namespace Google.ProtocolBuffers.TestProtos {
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class UnknownEnumTest {
-
-    #region Extension registration
-    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
-    }
-    #endregion
-    #region Static variables
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_util_DownRevision__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DownRevision, global::Google.ProtocolBuffers.TestProtos.DownRevision.Builder> internal__static_google_protobuf_util_DownRevision__FieldAccessorTable;
-    internal static pbd::MessageDescriptor internal__static_google_protobuf_util_UpRevision__Descriptor;
-    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.UpRevision, global::Google.ProtocolBuffers.TestProtos.UpRevision.Builder> internal__static_google_protobuf_util_UpRevision__FieldAccessorTable;
-    #endregion
-    #region Descriptor
-    public static pbd::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbd::FileDescriptor descriptor;
-
-    static UnknownEnumTest() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "Cidnb29nbGUvcHJvdG9idWYvdW5rbm93bl9lbnVtX3Rlc3QucHJvdG8SFGdv", 
-            "b2dsZS5wcm90b2J1Zi51dGlsIr8BCgxEb3duUmV2aXNpb24SRQoFdmFsdWUY", 
-            "ASABKA4yJy5nb29nbGUucHJvdG9idWYudXRpbC5Eb3duUmV2aXNpb24uRW51", 
-            "bToNREVGQVVMVF9WQUxVRRI3CgZ2YWx1ZXMYAiADKA4yJy5nb29nbGUucHJv", 
-            "dG9idWYudXRpbC5Eb3duUmV2aXNpb24uRW51bSIvCgRFbnVtEhEKDURFRkFV", 
-            "TFRfVkFMVUUQAhIUChBOT05ERUZBVUxUX1ZBTFVFEAMi6gEKClVwUmV2aXNp", 
-            "b24SQwoFdmFsdWUYASABKA4yJS5nb29nbGUucHJvdG9idWYudXRpbC5VcFJl", 
-            "dmlzaW9uLkVudW06DURFRkFVTFRfVkFMVUUSNQoGdmFsdWVzGAIgAygOMiUu", 
-            "Z29vZ2xlLnByb3RvYnVmLnV0aWwuVXBSZXZpc2lvbi5FbnVtImAKBEVudW0S", 
-            "EQoNREVGQVVMVF9WQUxVRRACEhQKEE5PTkRFRkFVTFRfVkFMVUUQAxINCglO", 
-            "RVdfVkFMVUUQBBIPCgtORVdfVkFMVUVfMhAFEg8KC05FV19WQUxVRV8zEAZC", 
-          "JKoCIUdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVzdFByb3Rvcw=="));
-      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
-        descriptor = root;
-        internal__static_google_protobuf_util_DownRevision__Descriptor = Descriptor.MessageTypes[0];
-        internal__static_google_protobuf_util_DownRevision__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DownRevision, global::Google.ProtocolBuffers.TestProtos.DownRevision.Builder>(internal__static_google_protobuf_util_DownRevision__Descriptor,
-                new string[] { "Value", "Values", });
-        internal__static_google_protobuf_util_UpRevision__Descriptor = Descriptor.MessageTypes[1];
-        internal__static_google_protobuf_util_UpRevision__FieldAccessorTable = 
-            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.UpRevision, global::Google.ProtocolBuffers.TestProtos.UpRevision.Builder>(internal__static_google_protobuf_util_UpRevision__Descriptor,
-                new string[] { "Value", "Values", });
-        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
-        RegisterAllExtensions(registry);
-        return registry;
-      };
-      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
-          new pbd::FileDescriptor[] {
-          }, assigner);
-    }
-    #endregion
-
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class DownRevision : pb::GeneratedMessage<DownRevision, DownRevision.Builder> {
-    private DownRevision() { }
-    private static readonly DownRevision defaultInstance = new DownRevision().MakeReadOnly();
-    private static readonly string[] _downRevisionFieldNames = new string[] { "value", "values" };
-    private static readonly uint[] _downRevisionFieldTags = new uint[] { 8, 16 };
-    public static DownRevision DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override DownRevision DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override DownRevision ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnknownEnumTest.internal__static_google_protobuf_util_DownRevision__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<DownRevision, DownRevision.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnknownEnumTest.internal__static_google_protobuf_util_DownRevision__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum Enum {
-        DEFAULT_VALUE = 2,
-        NONDEFAULT_VALUE = 3,
-      }
-
-    }
-    #endregion
-
-    public const int ValueFieldNumber = 1;
-    private bool hasValue;
-    private global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum value_ = global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum.DEFAULT_VALUE;
-    public bool HasValue {
-      get { return hasValue; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum Value {
-      get { return value_; }
-    }
-
-    public const int ValuesFieldNumber = 2;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum> values_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum> ValuesList {
-      get { return pbc::Lists.AsReadOnly(values_); }
-    }
-    public int ValuesCount {
-      get { return values_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum GetValues(int index) {
-      return values_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _downRevisionFieldNames;
-      if (hasValue) {
-        output.WriteEnum(1, field_names[0], (int) Value, Value);
-      }
-      if (values_.Count > 0) {
-        output.WriteEnumArray(2, field_names[1], values_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasValue) {
-        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Value);
-      }
-      {
-        int dataSize = 0;
-        if (values_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum element in values_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 1 * values_.Count;
-        }
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static DownRevision ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DownRevision ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DownRevision ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static DownRevision ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static DownRevision ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DownRevision ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static DownRevision ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static DownRevision ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static DownRevision ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static DownRevision ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private DownRevision MakeReadOnly() {
-      values_.MakeReadOnly();
-      return this;
-    }
-
-    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(DownRevision prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<DownRevision, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(DownRevision cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private DownRevision result;
-
-      private DownRevision PrepareBuilder() {
-        if (resultIsReadOnly) {
-          DownRevision original = result;
-          result = new DownRevision();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override DownRevision MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.DownRevision.Descriptor; }
-      }
-
-      public override DownRevision DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.DownRevision.DefaultInstance; }
-      }
-
-      public override DownRevision BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is DownRevision) {
-          return MergeFrom((DownRevision) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(DownRevision other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.DownRevision.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasValue) {
-          Value = other.Value;
-        }
-        if (other.values_.Count != 0) {
-          result.values_.Add(other.values_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_downRevisionFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _downRevisionFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              object unknown;
-              if(input.ReadEnum(ref result.value_, out unknown)) {
-                result.hasValue = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(1, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 18:
-            case 16: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum>(tag, field_name, result.values_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(2, (ulong)(int)rawValue);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasValue {
-        get { return result.hasValue; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum Value {
-        get { return result.Value; }
-        set { SetValue(value); }
-      }
-      public Builder SetValue(global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum value) {
-        PrepareBuilder();
-        result.hasValue = true;
-        result.value_ = value;
-        return this;
-      }
-      public Builder ClearValue() {
-        PrepareBuilder();
-        result.hasValue = false;
-        result.value_ = global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum.DEFAULT_VALUE;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum> ValuesList {
-        get { return PrepareBuilder().values_; }
-      }
-      public int ValuesCount {
-        get { return result.ValuesCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum GetValues(int index) {
-        return result.GetValues(index);
-      }
-      public Builder SetValues(int index, global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum value) {
-        PrepareBuilder();
-        result.values_[index] = value;
-        return this;
-      }
-      public Builder AddValues(global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum value) {
-        PrepareBuilder();
-        result.values_.Add(value);
-        return this;
-      }
-      public Builder AddRangeValues(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.DownRevision.Types.Enum> values) {
-        PrepareBuilder();
-        result.values_.Add(values);
-        return this;
-      }
-      public Builder ClearValues() {
-        PrepareBuilder();
-        result.values_.Clear();
-        return this;
-      }
-    }
-    static DownRevision() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnknownEnumTest.Descriptor, null);
-    }
-  }
-
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class UpRevision : pb::GeneratedMessage<UpRevision, UpRevision.Builder> {
-    private UpRevision() { }
-    private static readonly UpRevision defaultInstance = new UpRevision().MakeReadOnly();
-    private static readonly string[] _upRevisionFieldNames = new string[] { "value", "values" };
-    private static readonly uint[] _upRevisionFieldTags = new uint[] { 8, 16 };
-    public static UpRevision DefaultInstance {
-      get { return defaultInstance; }
-    }
-
-    public override UpRevision DefaultInstanceForType {
-      get { return DefaultInstance; }
-    }
-
-    protected override UpRevision ThisMessage {
-      get { return this; }
-    }
-
-    public static pbd::MessageDescriptor Descriptor {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnknownEnumTest.internal__static_google_protobuf_util_UpRevision__Descriptor; }
-    }
-
-    protected override pb::FieldAccess.FieldAccessorTable<UpRevision, UpRevision.Builder> InternalFieldAccessors {
-      get { return global::Google.ProtocolBuffers.TestProtos.UnknownEnumTest.internal__static_google_protobuf_util_UpRevision__FieldAccessorTable; }
-    }
-
-    #region Nested types
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      public enum Enum {
-        DEFAULT_VALUE = 2,
-        NONDEFAULT_VALUE = 3,
-        NEW_VALUE = 4,
-        NEW_VALUE_2 = 5,
-        NEW_VALUE_3 = 6,
-      }
-
-    }
-    #endregion
-
-    public const int ValueFieldNumber = 1;
-    private bool hasValue;
-    private global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum value_ = global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum.DEFAULT_VALUE;
-    public bool HasValue {
-      get { return hasValue; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum Value {
-      get { return value_; }
-    }
-
-    public const int ValuesFieldNumber = 2;
-    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum> values_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum>();
-    public scg::IList<global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum> ValuesList {
-      get { return pbc::Lists.AsReadOnly(values_); }
-    }
-    public int ValuesCount {
-      get { return values_.Count; }
-    }
-    public global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum GetValues(int index) {
-      return values_[index];
-    }
-
-    public override bool IsInitialized {
-      get {
-        return true;
-      }
-    }
-
-    public override void WriteTo(pb::ICodedOutputStream output) {
-      CalcSerializedSize();
-      string[] field_names = _upRevisionFieldNames;
-      if (hasValue) {
-        output.WriteEnum(1, field_names[0], (int) Value, Value);
-      }
-      if (values_.Count > 0) {
-        output.WriteEnumArray(2, field_names[1], values_);
-      }
-      UnknownFields.WriteTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public override int SerializedSize {
-      get {
-        int size = memoizedSerializedSize;
-        if (size != -1) return size;
-        return CalcSerializedSize();
-      }
-    }
-
-    private int CalcSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (hasValue) {
-        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Value);
-      }
-      {
-        int dataSize = 0;
-        if (values_.Count > 0) {
-          foreach (global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum element in values_) {
-            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);
-          }
-          size += dataSize;
-          size += 1 * values_.Count;
-        }
-      }
-      size += UnknownFields.SerializedSize;
-      memoizedSerializedSize = size;
-      return size;
-    }
-    public static UpRevision ParseFrom(pb::ByteString data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static UpRevision ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static UpRevision ParseFrom(byte[] data) {
-      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
-    }
-    public static UpRevision ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
-    }
-    public static UpRevision ParseFrom(global::System.IO.Stream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static UpRevision ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    public static UpRevision ParseDelimitedFrom(global::System.IO.Stream input) {
-      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
-    }
-    public static UpRevision ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
-      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
-    }
-    public static UpRevision ParseFrom(pb::ICodedInputStream input) {
-      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
-    }
-    public static UpRevision ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
-    }
-    private UpRevision MakeReadOnly() {
-      values_.MakeReadOnly();
-      return this;
-    }
-
-    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(UpRevision prototype) {
-      return new Builder(prototype);
-    }
-
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public sealed partial class Builder : pb::GeneratedBuilder<UpRevision, Builder> {
-      protected override Builder ThisBuilder {
-        get { return this; }
-      }
-      public Builder() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-      }
-      internal Builder(UpRevision cloneFrom) {
-        result = cloneFrom;
-        resultIsReadOnly = true;
-      }
-
-      private bool resultIsReadOnly;
-      private UpRevision result;
-
-      private UpRevision PrepareBuilder() {
-        if (resultIsReadOnly) {
-          UpRevision original = result;
-          result = new UpRevision();
-          resultIsReadOnly = false;
-          MergeFrom(original);
-        }
-        return result;
-      }
-
-      public override bool IsInitialized {
-        get { return result.IsInitialized; }
-      }
-
-      protected override UpRevision MessageBeingBuilt {
-        get { return PrepareBuilder(); }
-      }
-
-      public override Builder Clear() {
-        result = DefaultInstance;
-        resultIsReadOnly = true;
-        return this;
-      }
-
-      public override Builder Clone() {
-        if (resultIsReadOnly) {
-          return new Builder(result);
-        } else {
-          return new Builder().MergeFrom(result);
-        }
-      }
-
-      public override pbd::MessageDescriptor DescriptorForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.UpRevision.Descriptor; }
-      }
-
-      public override UpRevision DefaultInstanceForType {
-        get { return global::Google.ProtocolBuffers.TestProtos.UpRevision.DefaultInstance; }
-      }
-
-      public override UpRevision BuildPartial() {
-        if (resultIsReadOnly) {
-          return result;
-        }
-        resultIsReadOnly = true;
-        return result.MakeReadOnly();
-      }
-
-      public override Builder MergeFrom(pb::IMessage other) {
-        if (other is UpRevision) {
-          return MergeFrom((UpRevision) other);
-        } else {
-          base.MergeFrom(other);
-          return this;
-        }
-      }
-
-      public override Builder MergeFrom(UpRevision other) {
-        if (other == global::Google.ProtocolBuffers.TestProtos.UpRevision.DefaultInstance) return this;
-        PrepareBuilder();
-        if (other.HasValue) {
-          Value = other.Value;
-        }
-        if (other.values_.Count != 0) {
-          result.values_.Add(other.values_);
-        }
-        this.MergeUnknownFields(other.UnknownFields);
-        return this;
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input) {
-        return MergeFrom(input, pb::ExtensionRegistry.Empty);
-      }
-
-      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
-        PrepareBuilder();
-        pb::UnknownFieldSet.Builder unknownFields = null;
-        uint tag;
-        string field_name;
-        while (input.ReadTag(out tag, out field_name)) {
-          if(tag == 0 && field_name != null) {
-            int field_ordinal = global::System.Array.BinarySearch(_upRevisionFieldNames, field_name, global::System.StringComparer.Ordinal);
-            if(field_ordinal >= 0)
-              tag = _upRevisionFieldTags[field_ordinal];
-            else {
-              if (unknownFields == null) {
-                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-              }
-              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
-              continue;
-            }
-          }
-          switch (tag) {
-            case 0: {
-              throw pb::InvalidProtocolBufferException.InvalidTag();
-            }
-            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, field_name);
-              break;
-            }
-            case 8: {
-              object unknown;
-              if(input.ReadEnum(ref result.value_, out unknown)) {
-                result.hasValue = true;
-              } else if(unknown is int) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                unknownFields.MergeVarintField(1, (ulong)(int)unknown);
-              }
-              break;
-            }
-            case 18:
-            case 16: {
-              scg::ICollection<object> unknownItems;
-              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum>(tag, field_name, result.values_, out unknownItems);
-              if (unknownItems != null) {
-                if (unknownFields == null) {
-                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
-                }
-                foreach (object rawValue in unknownItems)
-                  if (rawValue is int)
-                    unknownFields.MergeVarintField(2, (ulong)(int)rawValue);
-              }
-              break;
-            }
-          }
-        }
-
-        if (unknownFields != null) {
-          this.UnknownFields = unknownFields.Build();
-        }
-        return this;
-      }
-
-
-      public bool HasValue {
-        get { return result.hasValue; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum Value {
-        get { return result.Value; }
-        set { SetValue(value); }
-      }
-      public Builder SetValue(global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum value) {
-        PrepareBuilder();
-        result.hasValue = true;
-        result.value_ = value;
-        return this;
-      }
-      public Builder ClearValue() {
-        PrepareBuilder();
-        result.hasValue = false;
-        result.value_ = global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum.DEFAULT_VALUE;
-        return this;
-      }
-
-      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum> ValuesList {
-        get { return PrepareBuilder().values_; }
-      }
-      public int ValuesCount {
-        get { return result.ValuesCount; }
-      }
-      public global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum GetValues(int index) {
-        return result.GetValues(index);
-      }
-      public Builder SetValues(int index, global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum value) {
-        PrepareBuilder();
-        result.values_[index] = value;
-        return this;
-      }
-      public Builder AddValues(global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum value) {
-        PrepareBuilder();
-        result.values_.Add(value);
-        return this;
-      }
-      public Builder AddRangeValues(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.UpRevision.Types.Enum> values) {
-        PrepareBuilder();
-        result.values_.Add(values);
-        return this;
-      }
-      public Builder ClearValues() {
-        PrepareBuilder();
-        result.values_.Clear();
-        return this;
-      }
-    }
-    static UpRevision() {
-      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnknownEnumTest.Descriptor, null);
-    }
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code

+ 0 - 83
csharp/src/ProtocolBuffers.Test/TestReaderForUrlEncoded.cs

@@ -1,83 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-using Google.ProtocolBuffers.TestProtos;
-using Google.ProtocolBuffers.Serialization.Http;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class TestReaderForUrlEncoded
-    {
-        [Test]
-        public void Example_FromQueryString()
-        {
-            Uri sampleUri = new Uri("http://sample.com/Path/File.ext?text=two+three%20four&valid=true&numbers=1&numbers=2", UriKind.Absolute);
-
-            ICodedInputStream input = FormUrlEncodedReader.CreateInstance(sampleUri.Query);
-
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            builder.MergeFrom(input);
-            
-            TestXmlMessage message = builder.Build();
-            Assert.AreEqual(true, message.Valid);
-            Assert.AreEqual("two three four", message.Text);
-            Assert.AreEqual(2, message.NumbersCount);
-            Assert.AreEqual(1, message.NumbersList[0]);
-            Assert.AreEqual(2, message.NumbersList[1]);
-        }
-
-        [Test]
-        public void Example_FromFormData()
-        {
-            Stream rawPost = new MemoryStream(Encoding.UTF8.GetBytes("text=two+three%20four&valid=true&numbers=1&numbers=2"), false);
-
-            ICodedInputStream input = FormUrlEncodedReader.CreateInstance(rawPost);
-
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            builder.MergeFrom(input);
-
-            TestXmlMessage message = builder.Build();
-            Assert.AreEqual(true, message.Valid);
-            Assert.AreEqual("two three four", message.Text);
-            Assert.AreEqual(2, message.NumbersCount);
-            Assert.AreEqual(1, message.NumbersList[0]);
-            Assert.AreEqual(2, message.NumbersList[1]);
-        }
-
-        [Test]
-        public void TestEmptyValues()
-        {
-            ICodedInputStream input = FormUrlEncodedReader.CreateInstance("valid=true&text=&numbers=1");
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            builder.MergeFrom(input);
-
-            Assert.IsTrue(builder.Valid);
-            Assert.IsTrue(builder.HasText);
-            Assert.AreEqual("", builder.Text);
-            Assert.AreEqual(1, builder.NumbersCount);
-            Assert.AreEqual(1, builder.NumbersList[0]);
-        }
-
-        [Test]
-        public void TestNoValue()
-        {
-            ICodedInputStream input = FormUrlEncodedReader.CreateInstance("valid=true&text&numbers=1");
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            builder.MergeFrom(input);
-
-            Assert.IsTrue(builder.Valid);
-            Assert.IsTrue(builder.HasText);
-            Assert.AreEqual("", builder.Text);
-            Assert.AreEqual(1, builder.NumbersCount);
-            Assert.AreEqual(1, builder.NumbersList[0]);
-        }
-
-        [Test]
-        public void FormUrlEncodedReaderDoesNotSupportChildren()
-        {
-            ICodedInputStream input = FormUrlEncodedReader.CreateInstance("child=uh0");
-            Assert.Throws<NotSupportedException>(() => TestXmlMessage.CreateBuilder().MergeFrom(input));
-        }
-    }
-}

+ 0 - 301
csharp/src/ProtocolBuffers.Test/TestResources.cs

@@ -1,301 +0,0 @@
-namespace Google.ProtocolBuffers
-{
-    internal class TestResources
-    {
-        #region golden_message
-        internal static byte[] golden_message
-        {
-            get
-            {
-                return System.Convert.FromBase64String(@"
-CGUQZhhnIGgo0gEw1AE9awAAAEFsAAAAAAAAAE1tAAAAUW4AAAAAAAAAXQAA3kJhAAAAAAAAXEBo
-AXIDMTE1egMxMTaDAYgBdYQBkgECCHaaAQIId6IBAgh4qAEDsAEGuAEJwgEDMTI0ygEDMTI1+AHJ
-AfgBrQKAAsoBgAKuAogCywGIAq8CkALMAZACsAKYApoDmALiBKACnAOgAuQErQLPAAAArQIzAQAA
-sQLQAAAAAAAAALECNAEAAAAAAAC9AtEAAAC9AjUBAADBAtIAAAAAAAAAwQI2AQAAAAAAAM0CAABT
-Q80CAICbQ9ECAAAAAACAakDRAgAAAAAAgHNA2AIB2AIA4gIDMjE14gIDMzE16gIDMjE26gIDMzE2
-8wL4AtkB9ALzAvgCvQL0AoIDAwjaAYIDAwi+AooDAwjbAYoDAwi/ApIDAwjcAZIDAwjAApgDApgD
-A6ADBaADBqgDCKgDCbIDAzIyNLIDAzMyNLoDAzIyNboDAzMyNegDkQPwA5ID+AOTA4AElAOIBKoG
-kASsBp0ElwEAAKEEmAEAAAAAAACtBJkBAACxBJoBAAAAAAAAvQQAgM1DwQQAAAAAAMB5QMgEANIE
-AzQxNdoEAzQxNogFAZAFBJgFB6IFAzQyNKoFAzQyNZIHAzYwNA==
-");
-            }
-        }
-        #endregion
-
-        #region golden_packed_fields_message
-        internal static byte[] golden_packed_fields_message
-        {
-            get
-            {
-                return System.Convert.FromBase64String(@"
-0gUE2QS9BdoFBNoEvgXiBQTbBL8F6gUE3ATABfIFBLoJggv6BQS8CYQLggYIXwIAAMMCAACKBhBg
-AgAAAAAAAMQCAAAAAAAAkgYIYQIAAMUCAACaBhBiAgAAAAAAAMYCAAAAAAAAogYIAMAYRADAMUSq
-BhAAAAAAACCDQAAAAAAAQIZAsgYCAQC6BgIFBg==
-");
-            }
-        }
-        #endregion
-
-        #region text_format_unittest_data
-        internal static string text_format_unittest_data
-        {
-            get
-            {
-                return @"
-optional_int32: 101
-optional_int64: 102
-optional_uint32: 103
-optional_uint64: 104
-optional_sint32: 105
-optional_sint64: 106
-optional_fixed32: 107
-optional_fixed64: 108
-optional_sfixed32: 109
-optional_sfixed64: 110
-optional_float: 111
-optional_double: 112
-optional_bool: true
-optional_string: ""115""
-optional_bytes: ""116""
-OptionalGroup {
-  a: 117
-}
-optional_nested_message {
-  bb: 118
-}
-optional_foreign_message {
-  c: 119
-}
-optional_import_message {
-  d: 120
-}
-optional_nested_enum: BAZ
-optional_foreign_enum: FOREIGN_BAZ
-optional_import_enum: IMPORT_BAZ
-optional_string_piece: ""124""
-optional_cord: ""125""
-repeated_int32: 201
-repeated_int32: 301
-repeated_int64: 202
-repeated_int64: 302
-repeated_uint32: 203
-repeated_uint32: 303
-repeated_uint64: 204
-repeated_uint64: 304
-repeated_sint32: 205
-repeated_sint32: 305
-repeated_sint64: 206
-repeated_sint64: 306
-repeated_fixed32: 207
-repeated_fixed32: 307
-repeated_fixed64: 208
-repeated_fixed64: 308
-repeated_sfixed32: 209
-repeated_sfixed32: 309
-repeated_sfixed64: 210
-repeated_sfixed64: 310
-repeated_float: 211
-repeated_float: 311
-repeated_double: 212
-repeated_double: 312
-repeated_bool: true
-repeated_bool: false
-repeated_string: ""215""
-repeated_string: ""315""
-repeated_bytes: ""216""
-repeated_bytes: ""316""
-RepeatedGroup {
-  a: 217
-}
-RepeatedGroup {
-  a: 317
-}
-repeated_nested_message {
-  bb: 218
-}
-repeated_nested_message {
-  bb: 318
-}
-repeated_foreign_message {
-  c: 219
-}
-repeated_foreign_message {
-  c: 319
-}
-repeated_import_message {
-  d: 220
-}
-repeated_import_message {
-  d: 320
-}
-repeated_nested_enum: BAR
-repeated_nested_enum: BAZ
-repeated_foreign_enum: FOREIGN_BAR
-repeated_foreign_enum: FOREIGN_BAZ
-repeated_import_enum: IMPORT_BAR
-repeated_import_enum: IMPORT_BAZ
-repeated_string_piece: ""224""
-repeated_string_piece: ""324""
-repeated_cord: ""225""
-repeated_cord: ""325""
-default_int32: 401
-default_int64: 402
-default_uint32: 403
-default_uint64: 404
-default_sint32: 405
-default_sint64: 406
-default_fixed32: 407
-default_fixed64: 408
-default_sfixed32: 409
-default_sfixed64: 410
-default_float: 411
-default_double: 412
-default_bool: false
-default_string: ""415""
-default_bytes: ""416""
-default_nested_enum: FOO
-default_foreign_enum: FOREIGN_FOO
-default_import_enum: IMPORT_FOO
-default_string_piece: ""424""
-default_cord: ""425""
-oneof_bytes: ""604""
-
-";
-            }
-        }
-        #endregion
-
-        #region text_format_unittest_extensions_data
-        internal static string text_format_unittest_extensions_data
-        {
-            get
-            {
-                return @"
-[protobuf_unittest.optional_int32_extension]: 101
-[protobuf_unittest.optional_int64_extension]: 102
-[protobuf_unittest.optional_uint32_extension]: 103
-[protobuf_unittest.optional_uint64_extension]: 104
-[protobuf_unittest.optional_sint32_extension]: 105
-[protobuf_unittest.optional_sint64_extension]: 106
-[protobuf_unittest.optional_fixed32_extension]: 107
-[protobuf_unittest.optional_fixed64_extension]: 108
-[protobuf_unittest.optional_sfixed32_extension]: 109
-[protobuf_unittest.optional_sfixed64_extension]: 110
-[protobuf_unittest.optional_float_extension]: 111
-[protobuf_unittest.optional_double_extension]: 112
-[protobuf_unittest.optional_bool_extension]: true
-[protobuf_unittest.optional_string_extension]: ""115""
-[protobuf_unittest.optional_bytes_extension]: ""116""
-[protobuf_unittest.optionalgroup_extension] {
-  a: 117
-}
-[protobuf_unittest.optional_nested_message_extension] {
-  bb: 118
-}
-[protobuf_unittest.optional_foreign_message_extension] {
-  c: 119
-}
-[protobuf_unittest.optional_import_message_extension] {
-  d: 120
-}
-[protobuf_unittest.optional_nested_enum_extension]: BAZ
-[protobuf_unittest.optional_foreign_enum_extension]: FOREIGN_BAZ
-[protobuf_unittest.optional_import_enum_extension]: IMPORT_BAZ
-[protobuf_unittest.optional_string_piece_extension]: ""124""
-[protobuf_unittest.optional_cord_extension]: ""125""
-[protobuf_unittest.repeated_int32_extension]: 201
-[protobuf_unittest.repeated_int32_extension]: 301
-[protobuf_unittest.repeated_int64_extension]: 202
-[protobuf_unittest.repeated_int64_extension]: 302
-[protobuf_unittest.repeated_uint32_extension]: 203
-[protobuf_unittest.repeated_uint32_extension]: 303
-[protobuf_unittest.repeated_uint64_extension]: 204
-[protobuf_unittest.repeated_uint64_extension]: 304
-[protobuf_unittest.repeated_sint32_extension]: 205
-[protobuf_unittest.repeated_sint32_extension]: 305
-[protobuf_unittest.repeated_sint64_extension]: 206
-[protobuf_unittest.repeated_sint64_extension]: 306
-[protobuf_unittest.repeated_fixed32_extension]: 207
-[protobuf_unittest.repeated_fixed32_extension]: 307
-[protobuf_unittest.repeated_fixed64_extension]: 208
-[protobuf_unittest.repeated_fixed64_extension]: 308
-[protobuf_unittest.repeated_sfixed32_extension]: 209
-[protobuf_unittest.repeated_sfixed32_extension]: 309
-[protobuf_unittest.repeated_sfixed64_extension]: 210
-[protobuf_unittest.repeated_sfixed64_extension]: 310
-[protobuf_unittest.repeated_float_extension]: 211
-[protobuf_unittest.repeated_float_extension]: 311
-[protobuf_unittest.repeated_double_extension]: 212
-[protobuf_unittest.repeated_double_extension]: 312
-[protobuf_unittest.repeated_bool_extension]: true
-[protobuf_unittest.repeated_bool_extension]: false
-[protobuf_unittest.repeated_string_extension]: ""215""
-[protobuf_unittest.repeated_string_extension]: ""315""
-[protobuf_unittest.repeated_bytes_extension]: ""216""
-[protobuf_unittest.repeated_bytes_extension]: ""316""
-[protobuf_unittest.repeatedgroup_extension] {
-  a: 217
-}
-[protobuf_unittest.repeatedgroup_extension] {
-  a: 317
-}
-[protobuf_unittest.repeated_nested_message_extension] {
-  bb: 218
-}
-[protobuf_unittest.repeated_nested_message_extension] {
-  bb: 318
-}
-[protobuf_unittest.repeated_foreign_message_extension] {
-  c: 219
-}
-[protobuf_unittest.repeated_foreign_message_extension] {
-  c: 319
-}
-[protobuf_unittest.repeated_import_message_extension] {
-  d: 220
-}
-[protobuf_unittest.repeated_import_message_extension] {
-  d: 320
-}
-[protobuf_unittest.repeated_nested_enum_extension]: BAR
-[protobuf_unittest.repeated_nested_enum_extension]: BAZ
-[protobuf_unittest.repeated_foreign_enum_extension]: FOREIGN_BAR
-[protobuf_unittest.repeated_foreign_enum_extension]: FOREIGN_BAZ
-[protobuf_unittest.repeated_import_enum_extension]: IMPORT_BAR
-[protobuf_unittest.repeated_import_enum_extension]: IMPORT_BAZ
-[protobuf_unittest.repeated_string_piece_extension]: ""224""
-[protobuf_unittest.repeated_string_piece_extension]: ""324""
-[protobuf_unittest.repeated_cord_extension]: ""225""
-[protobuf_unittest.repeated_cord_extension]: ""325""
-[protobuf_unittest.default_int32_extension]: 401
-[protobuf_unittest.default_int64_extension]: 402
-[protobuf_unittest.default_uint32_extension]: 403
-[protobuf_unittest.default_uint64_extension]: 404
-[protobuf_unittest.default_sint32_extension]: 405
-[protobuf_unittest.default_sint64_extension]: 406
-[protobuf_unittest.default_fixed32_extension]: 407
-[protobuf_unittest.default_fixed64_extension]: 408
-[protobuf_unittest.default_sfixed32_extension]: 409
-[protobuf_unittest.default_sfixed64_extension]: 410
-[protobuf_unittest.default_float_extension]: 411
-[protobuf_unittest.default_double_extension]: 412
-[protobuf_unittest.default_bool_extension]: false
-[protobuf_unittest.default_string_extension]: ""415""
-[protobuf_unittest.default_bytes_extension]: ""416""
-[protobuf_unittest.default_nested_enum_extension]: FOO
-[protobuf_unittest.default_foreign_enum_extension]: FOREIGN_FOO
-[protobuf_unittest.default_import_enum_extension]: IMPORT_FOO
-[protobuf_unittest.default_string_piece_extension]: ""424""
-[protobuf_unittest.default_cord_extension]: ""425""
-[protobuf_unittest.oneof_uint32_extension]: 601
-[protobuf_unittest.oneof_nested_message_extension] {
-  bb: 602
-}
-[protobuf_unittest.oneof_string_extension]: ""603""
-[protobuf_unittest.oneof_bytes_extension]: ""604""
-";
-            }
-        }
-        #endregion
-    }
-}

+ 0 - 1862
csharp/src/ProtocolBuffers.Test/TestUtil.cs

@@ -1,1862 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Text;
-using System.Threading;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    internal static class TestUtil
-    {
-        private static ByteString goldenMessage = null;
-
-        internal static ByteString GoldenMessage
-        {
-            get
-            {
-                if (goldenMessage == null)
-                {
-                    goldenMessage = ByteString.CopyFrom(TestResources.golden_message);
-                }
-                return goldenMessage;
-            }
-        }
-
-        private static ByteString goldenPackedFieldsMessage = null;
-
-        /// <summary>
-        /// Get the bytes of the "golden packed fields message".  This is a serialized
-        /// TestPackedTypes with all fields set as they would be by SetPackedFields,
-        /// but it is loaded from a file on disk rather than generated dynamically.
-        /// The file is actually generated by C++ code, so testing against it verifies compatibility
-        /// with C++.
-        /// </summary>
-        public static ByteString GetGoldenPackedFieldsMessage()
-        {
-            if (goldenPackedFieldsMessage == null)
-            {
-                goldenPackedFieldsMessage = ByteString.CopyFrom(TestResources.golden_packed_fields_message);
-            }
-            return goldenPackedFieldsMessage;
-        }
-
-        /// <summary>
-        /// Creates an unmodifiable ExtensionRegistry containing all the extensions
-        /// of TestAllExtensions.
-        /// </summary>
-        /// <returns></returns>
-        internal static ExtensionRegistry CreateExtensionRegistry()
-        {
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            RegisterAllExtensions(registry);
-            return registry.AsReadOnly();
-        }
-
-        /// <summary>
-        /// Registers all of the extensions in TestAllExtensions with the given
-        /// ExtensionRegistry.
-        /// </summary>
-        internal static void RegisterAllExtensions(ExtensionRegistry registry)
-        {
-            registry.Add(Unittest.OptionalInt32Extension);
-            registry.Add(Unittest.OptionalInt64Extension);
-            registry.Add(Unittest.OptionalUint32Extension);
-            registry.Add(Unittest.OptionalUint64Extension);
-            registry.Add(Unittest.OptionalSint32Extension);
-            registry.Add(Unittest.OptionalSint64Extension);
-            registry.Add(Unittest.OptionalFixed32Extension);
-            registry.Add(Unittest.OptionalFixed64Extension);
-            registry.Add(Unittest.OptionalSfixed32Extension);
-            registry.Add(Unittest.OptionalSfixed64Extension);
-            registry.Add(Unittest.OptionalFloatExtension);
-            registry.Add(Unittest.OptionalDoubleExtension);
-            registry.Add(Unittest.OptionalBoolExtension);
-            registry.Add(Unittest.OptionalStringExtension);
-            registry.Add(Unittest.OptionalBytesExtension);
-            registry.Add(Unittest.OptionalGroupExtension);
-            registry.Add(Unittest.OptionalNestedMessageExtension);
-            registry.Add(Unittest.OptionalForeignMessageExtension);
-            registry.Add(Unittest.OptionalImportMessageExtension);
-            registry.Add(Unittest.OptionalNestedEnumExtension);
-            registry.Add(Unittest.OptionalForeignEnumExtension);
-            registry.Add(Unittest.OptionalImportEnumExtension);
-            registry.Add(Unittest.OptionalStringPieceExtension);
-            registry.Add(Unittest.OptionalCordExtension);
-
-            registry.Add(Unittest.RepeatedInt32Extension);
-            registry.Add(Unittest.RepeatedInt64Extension);
-            registry.Add(Unittest.RepeatedUint32Extension);
-            registry.Add(Unittest.RepeatedUint64Extension);
-            registry.Add(Unittest.RepeatedSint32Extension);
-            registry.Add(Unittest.RepeatedSint64Extension);
-            registry.Add(Unittest.RepeatedFixed32Extension);
-            registry.Add(Unittest.RepeatedFixed64Extension);
-            registry.Add(Unittest.RepeatedSfixed32Extension);
-            registry.Add(Unittest.RepeatedSfixed64Extension);
-            registry.Add(Unittest.RepeatedFloatExtension);
-            registry.Add(Unittest.RepeatedDoubleExtension);
-            registry.Add(Unittest.RepeatedBoolExtension);
-            registry.Add(Unittest.RepeatedStringExtension);
-            registry.Add(Unittest.RepeatedBytesExtension);
-            registry.Add(Unittest.RepeatedGroupExtension);
-            registry.Add(Unittest.RepeatedNestedMessageExtension);
-            registry.Add(Unittest.RepeatedForeignMessageExtension);
-            registry.Add(Unittest.RepeatedImportMessageExtension);
-            registry.Add(Unittest.RepeatedNestedEnumExtension);
-            registry.Add(Unittest.RepeatedForeignEnumExtension);
-            registry.Add(Unittest.RepeatedImportEnumExtension);
-            registry.Add(Unittest.RepeatedStringPieceExtension);
-            registry.Add(Unittest.RepeatedCordExtension);
-
-            registry.Add(Unittest.DefaultInt32Extension);
-            registry.Add(Unittest.DefaultInt64Extension);
-            registry.Add(Unittest.DefaultUint32Extension);
-            registry.Add(Unittest.DefaultUint64Extension);
-            registry.Add(Unittest.DefaultSint32Extension);
-            registry.Add(Unittest.DefaultSint64Extension);
-            registry.Add(Unittest.DefaultFixed32Extension);
-            registry.Add(Unittest.DefaultFixed64Extension);
-            registry.Add(Unittest.DefaultSfixed32Extension);
-            registry.Add(Unittest.DefaultSfixed64Extension);
-            registry.Add(Unittest.DefaultFloatExtension);
-            registry.Add(Unittest.DefaultDoubleExtension);
-            registry.Add(Unittest.DefaultBoolExtension);
-            registry.Add(Unittest.DefaultStringExtension);
-            registry.Add(Unittest.DefaultBytesExtension);
-            registry.Add(Unittest.DefaultNestedEnumExtension);
-            registry.Add(Unittest.DefaultForeignEnumExtension);
-            registry.Add(Unittest.DefaultImportEnumExtension);
-            registry.Add(Unittest.DefaultStringPieceExtension);
-            registry.Add(Unittest.DefaultCordExtension);
-
-            registry.Add(Unittest.PackedInt32Extension);
-            registry.Add(Unittest.PackedInt64Extension);
-            registry.Add(Unittest.PackedUint32Extension);
-            registry.Add(Unittest.PackedUint64Extension);
-            registry.Add(Unittest.PackedSint32Extension);
-            registry.Add(Unittest.PackedSint64Extension);
-            registry.Add(Unittest.PackedFixed32Extension);
-            registry.Add(Unittest.PackedFixed64Extension);
-            registry.Add(Unittest.PackedSfixed32Extension);
-            registry.Add(Unittest.PackedSfixed64Extension);
-            registry.Add(Unittest.PackedFloatExtension);
-            registry.Add(Unittest.PackedDoubleExtension);
-            registry.Add(Unittest.PackedBoolExtension);
-            registry.Add(Unittest.PackedEnumExtension);
-
-            registry.Add(Unittest.OneofUint32Extension);
-            registry.Add(Unittest.OneofNestedMessageExtension);
-            registry.Add(Unittest.OneofStringExtension);
-            registry.Add(Unittest.OneofBytesExtension);
-        }
-
-        /// <summary>
-        /// Helper to convert a String to ByteString.
-        /// </summary>
-        internal static ByteString ToBytes(String str)
-        {
-            return ByteString.CopyFrom(Encoding.UTF8.GetBytes(str));
-        }
-
-        internal static TestAllTypes GetAllSet()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            SetAllFields(builder);
-            return builder.Build();
-        }
-
-        /// <summary>
-        /// Sets every field of the specified message to the values expected by
-        /// AssertAllFieldsSet.
-        /// </summary>
-        internal static void SetAllFields(TestAllTypes.Builder message)
-        {
-            message.SetOptionalInt32(101);
-            message.SetOptionalInt64(102);
-            message.SetOptionalUint32(103);
-            message.SetOptionalUint64(104);
-            message.SetOptionalSint32(105);
-            message.SetOptionalSint64(106);
-            message.SetOptionalFixed32(107);
-            message.SetOptionalFixed64(108);
-            message.SetOptionalSfixed32(109);
-            message.SetOptionalSfixed64(110);
-            message.SetOptionalFloat(111);
-            message.SetOptionalDouble(112);
-            message.SetOptionalBool(true);
-            message.SetOptionalString("115");
-            message.SetOptionalBytes(ToBytes("116"));
-
-            message.SetOptionalGroup(TestAllTypes.Types.OptionalGroup.CreateBuilder().SetA(117).Build());
-            message.SetOptionalNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());
-            message.SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(119).Build());
-            message.SetOptionalImportMessage(ImportMessage.CreateBuilder().SetD(120).Build());
-
-            message.SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);
-            message.SetOptionalForeignEnum(ForeignEnum.FOREIGN_BAZ);
-            message.SetOptionalImportEnum(ImportEnum.IMPORT_BAZ);
-
-            message.SetOptionalStringPiece("124");
-            message.SetOptionalCord("125");
-
-            // -----------------------------------------------------------------
-
-            message.AddRepeatedInt32(201);
-            message.AddRepeatedInt64(202);
-            message.AddRepeatedUint32(203);
-            message.AddRepeatedUint64(204);
-            message.AddRepeatedSint32(205);
-            message.AddRepeatedSint64(206);
-            message.AddRepeatedFixed32(207);
-            message.AddRepeatedFixed64(208);
-            message.AddRepeatedSfixed32(209);
-            message.AddRepeatedSfixed64(210);
-            message.AddRepeatedFloat(211);
-            message.AddRepeatedDouble(212);
-            message.AddRepeatedBool(true);
-            message.AddRepeatedString("215");
-            message.AddRepeatedBytes(ToBytes("216"));
-
-            message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(217).Build());
-            message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());
-            message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(219).Build());
-            message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(220).Build());
-
-            message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAR);
-            message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAR);
-            message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAR);
-
-            message.AddRepeatedStringPiece("224");
-            message.AddRepeatedCord("225");
-
-            // Add a second one of each field.
-            message.AddRepeatedInt32(301);
-            message.AddRepeatedInt64(302);
-            message.AddRepeatedUint32(303);
-            message.AddRepeatedUint64(304);
-            message.AddRepeatedSint32(305);
-            message.AddRepeatedSint64(306);
-            message.AddRepeatedFixed32(307);
-            message.AddRepeatedFixed64(308);
-            message.AddRepeatedSfixed32(309);
-            message.AddRepeatedSfixed64(310);
-            message.AddRepeatedFloat(311);
-            message.AddRepeatedDouble(312);
-            message.AddRepeatedBool(false);
-            message.AddRepeatedString("315");
-            message.AddRepeatedBytes(ToBytes("316"));
-
-            message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(317).Build());
-            message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());
-            message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(319).Build());
-            message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(320).Build());
-
-            message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);
-            message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAZ);
-            message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAZ);
-
-            message.AddRepeatedStringPiece("324");
-            message.AddRepeatedCord("325");
-
-            // -----------------------------------------------------------------
-
-            message.SetDefaultInt32(401);
-            message.SetDefaultInt64(402);
-            message.SetDefaultUint32(403);
-            message.SetDefaultUint64(404);
-            message.SetDefaultSint32(405);
-            message.SetDefaultSint64(406);
-            message.SetDefaultFixed32(407);
-            message.SetDefaultFixed64(408);
-            message.SetDefaultSfixed32(409);
-            message.SetDefaultSfixed64(410);
-            message.SetDefaultFloat(411);
-            message.SetDefaultDouble(412);
-            message.SetDefaultBool(false);
-            message.SetDefaultString("415");
-            message.SetDefaultBytes(ToBytes("416"));
-
-            message.SetDefaultNestedEnum(TestAllTypes.Types.NestedEnum.FOO);
-            message.SetDefaultForeignEnum(ForeignEnum.FOREIGN_FOO);
-            message.SetDefaultImportEnum(ImportEnum.IMPORT_FOO);
-
-            message.SetDefaultStringPiece("424");
-            message.SetDefaultCord("425");
-
-            message.SetOneofUint32(601);
-            message.SetOneofNestedMessage(
-                TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(602).Build());
-            message.SetOneofString("603");
-            message.SetOneofBytes(ToBytes("604"));
-
-        }
-
-        /// <summary>
-        /// Asserts that all fields of the specified message are set to the values
-        /// assigned by SetAllFields.
-        /// </summary>
-        internal static void AssertAllFieldsSet(TestAllTypes message)
-        {
-            Assert.IsTrue(message.HasOptionalInt32);
-            Assert.IsTrue(message.HasOptionalInt64);
-            Assert.IsTrue(message.HasOptionalUint32);
-            Assert.IsTrue(message.HasOptionalUint64);
-            Assert.IsTrue(message.HasOptionalSint32);
-            Assert.IsTrue(message.HasOptionalSint64);
-            Assert.IsTrue(message.HasOptionalFixed32);
-            Assert.IsTrue(message.HasOptionalFixed64);
-            Assert.IsTrue(message.HasOptionalSfixed32);
-            Assert.IsTrue(message.HasOptionalSfixed64);
-            Assert.IsTrue(message.HasOptionalFloat);
-            Assert.IsTrue(message.HasOptionalDouble);
-            Assert.IsTrue(message.HasOptionalBool);
-            Assert.IsTrue(message.HasOptionalString);
-            Assert.IsTrue(message.HasOptionalBytes);
-
-            Assert.IsTrue(message.HasOptionalGroup);
-            Assert.IsTrue(message.HasOptionalNestedMessage);
-            Assert.IsTrue(message.HasOptionalForeignMessage);
-            Assert.IsTrue(message.HasOptionalImportMessage);
-
-            Assert.IsTrue(message.OptionalGroup.HasA);
-            Assert.IsTrue(message.OptionalNestedMessage.HasBb);
-            Assert.IsTrue(message.OptionalForeignMessage.HasC);
-            Assert.IsTrue(message.OptionalImportMessage.HasD);
-
-            Assert.IsTrue(message.HasOptionalNestedEnum);
-            Assert.IsTrue(message.HasOptionalForeignEnum);
-            Assert.IsTrue(message.HasOptionalImportEnum);
-
-            Assert.IsTrue(message.HasOptionalStringPiece);
-            Assert.IsTrue(message.HasOptionalCord);
-
-            Assert.AreEqual(101, message.OptionalInt32);
-            Assert.AreEqual(102, message.OptionalInt64);
-            Assert.AreEqual(103u, message.OptionalUint32);
-            Assert.AreEqual(104u, message.OptionalUint64);
-            Assert.AreEqual(105, message.OptionalSint32);
-            Assert.AreEqual(106, message.OptionalSint64);
-            Assert.AreEqual(107u, message.OptionalFixed32);
-            Assert.AreEqual(108u, message.OptionalFixed64);
-            Assert.AreEqual(109, message.OptionalSfixed32);
-            Assert.AreEqual(110, message.OptionalSfixed64);
-            Assert.AreEqual(111, message.OptionalFloat);
-            Assert.AreEqual(112, message.OptionalDouble);
-            Assert.AreEqual(true, message.OptionalBool);
-            Assert.AreEqual("115", message.OptionalString);
-            Assert.AreEqual(ToBytes("116"), message.OptionalBytes);
-
-            Assert.AreEqual(117, message.OptionalGroup.A);
-            Assert.AreEqual(118, message.OptionalNestedMessage.Bb);
-            Assert.AreEqual(119, message.OptionalForeignMessage.C);
-            Assert.AreEqual(120, message.OptionalImportMessage.D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.OptionalNestedEnum);
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.OptionalForeignEnum);
-            Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.OptionalImportEnum);
-
-            Assert.AreEqual("124", message.OptionalStringPiece);
-            Assert.AreEqual("125", message.OptionalCord);
-
-            // -----------------------------------------------------------------
-
-            Assert.AreEqual(2, message.RepeatedInt32Count);
-            Assert.AreEqual(2, message.RepeatedInt64Count);
-            Assert.AreEqual(2, message.RepeatedUint32Count);
-            Assert.AreEqual(2, message.RepeatedUint64Count);
-            Assert.AreEqual(2, message.RepeatedSint32Count);
-            Assert.AreEqual(2, message.RepeatedSint64Count);
-            Assert.AreEqual(2, message.RepeatedFixed32Count);
-            Assert.AreEqual(2, message.RepeatedFixed64Count);
-            Assert.AreEqual(2, message.RepeatedSfixed32Count);
-            Assert.AreEqual(2, message.RepeatedSfixed64Count);
-            Assert.AreEqual(2, message.RepeatedFloatCount);
-            Assert.AreEqual(2, message.RepeatedDoubleCount);
-            Assert.AreEqual(2, message.RepeatedBoolCount);
-            Assert.AreEqual(2, message.RepeatedStringCount);
-            Assert.AreEqual(2, message.RepeatedBytesCount);
-
-            Assert.AreEqual(2, message.RepeatedGroupCount);
-            Assert.AreEqual(2, message.RepeatedNestedMessageCount);
-            Assert.AreEqual(2, message.RepeatedForeignMessageCount);
-            Assert.AreEqual(2, message.RepeatedImportMessageCount);
-            Assert.AreEqual(2, message.RepeatedNestedEnumCount);
-            Assert.AreEqual(2, message.RepeatedForeignEnumCount);
-            Assert.AreEqual(2, message.RepeatedImportEnumCount);
-
-            Assert.AreEqual(2, message.RepeatedStringPieceCount);
-            Assert.AreEqual(2, message.RepeatedCordCount);
-
-            Assert.AreEqual(201, message.GetRepeatedInt32(0));
-            Assert.AreEqual(202, message.GetRepeatedInt64(0));
-            Assert.AreEqual(203u, message.GetRepeatedUint32(0));
-            Assert.AreEqual(204u, message.GetRepeatedUint64(0));
-            Assert.AreEqual(205, message.GetRepeatedSint32(0));
-            Assert.AreEqual(206, message.GetRepeatedSint64(0));
-            Assert.AreEqual(207u, message.GetRepeatedFixed32(0));
-            Assert.AreEqual(208u, message.GetRepeatedFixed64(0));
-            Assert.AreEqual(209, message.GetRepeatedSfixed32(0));
-            Assert.AreEqual(210, message.GetRepeatedSfixed64(0));
-            Assert.AreEqual(211, message.GetRepeatedFloat(0));
-            Assert.AreEqual(212, message.GetRepeatedDouble(0));
-            Assert.AreEqual(true, message.GetRepeatedBool(0));
-            Assert.AreEqual("215", message.GetRepeatedString(0));
-            Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));
-
-            Assert.AreEqual(217, message.GetRepeatedGroup(0).A);
-            Assert.AreEqual(218, message.GetRepeatedNestedMessage(0).Bb);
-            Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);
-            Assert.AreEqual(220, message.GetRepeatedImportMessage(0).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum(0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));
-            Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));
-
-            Assert.AreEqual("224", message.GetRepeatedStringPiece(0));
-            Assert.AreEqual("225", message.GetRepeatedCord(0));
-
-            Assert.AreEqual(301, message.GetRepeatedInt32(1));
-            Assert.AreEqual(302, message.GetRepeatedInt64(1));
-            Assert.AreEqual(303u, message.GetRepeatedUint32(1));
-            Assert.AreEqual(304u, message.GetRepeatedUint64(1));
-            Assert.AreEqual(305, message.GetRepeatedSint32(1));
-            Assert.AreEqual(306, message.GetRepeatedSint64(1));
-            Assert.AreEqual(307u, message.GetRepeatedFixed32(1));
-            Assert.AreEqual(308u, message.GetRepeatedFixed64(1));
-            Assert.AreEqual(309, message.GetRepeatedSfixed32(1));
-            Assert.AreEqual(310, message.GetRepeatedSfixed64(1));
-            Assert.AreEqual(311f, message.GetRepeatedFloat(1));
-            Assert.AreEqual(312d, message.GetRepeatedDouble(1));
-            Assert.AreEqual(false, message.GetRepeatedBool(1));
-            Assert.AreEqual("315", message.GetRepeatedString(1));
-            Assert.AreEqual(ToBytes("316"), message.GetRepeatedBytes(1));
-
-            Assert.AreEqual(317, message.GetRepeatedGroup(1).A);
-            Assert.AreEqual(318, message.GetRepeatedNestedMessage(1).Bb);
-            Assert.AreEqual(319, message.GetRepeatedForeignMessage(1).C);
-            Assert.AreEqual(320, message.GetRepeatedImportMessage(1).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetRepeatedNestedEnum(1));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetRepeatedForeignEnum(1));
-            Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetRepeatedImportEnum(1));
-
-            Assert.AreEqual("324", message.GetRepeatedStringPiece(1));
-            Assert.AreEqual("325", message.GetRepeatedCord(1));
-
-            // -----------------------------------------------------------------
-
-            Assert.IsTrue(message.HasDefaultInt32);
-            Assert.IsTrue(message.HasDefaultInt64);
-            Assert.IsTrue(message.HasDefaultUint32);
-            Assert.IsTrue(message.HasDefaultUint64);
-            Assert.IsTrue(message.HasDefaultSint32);
-            Assert.IsTrue(message.HasDefaultSint64);
-            Assert.IsTrue(message.HasDefaultFixed32);
-            Assert.IsTrue(message.HasDefaultFixed64);
-            Assert.IsTrue(message.HasDefaultSfixed32);
-            Assert.IsTrue(message.HasDefaultSfixed64);
-            Assert.IsTrue(message.HasDefaultFloat);
-            Assert.IsTrue(message.HasDefaultDouble);
-            Assert.IsTrue(message.HasDefaultBool);
-            Assert.IsTrue(message.HasDefaultString);
-            Assert.IsTrue(message.HasDefaultBytes);
-
-            Assert.IsTrue(message.HasDefaultNestedEnum);
-            Assert.IsTrue(message.HasDefaultForeignEnum);
-            Assert.IsTrue(message.HasDefaultImportEnum);
-
-            Assert.IsTrue(message.HasDefaultStringPiece);
-            Assert.IsTrue(message.HasDefaultCord);
-
-            Assert.AreEqual(401, message.DefaultInt32);
-            Assert.AreEqual(402, message.DefaultInt64);
-            Assert.AreEqual(403u, message.DefaultUint32);
-            Assert.AreEqual(404u, message.DefaultUint64);
-            Assert.AreEqual(405, message.DefaultSint32);
-            Assert.AreEqual(406, message.DefaultSint64);
-            Assert.AreEqual(407u, message.DefaultFixed32);
-            Assert.AreEqual(408u, message.DefaultFixed64);
-            Assert.AreEqual(409, message.DefaultSfixed32);
-            Assert.AreEqual(410, message.DefaultSfixed64);
-            Assert.AreEqual(411, message.DefaultFloat);
-            Assert.AreEqual(412, message.DefaultDouble);
-            Assert.AreEqual(false, message.DefaultBool);
-            Assert.AreEqual("415", message.DefaultString);
-            Assert.AreEqual(ToBytes("416"), message.DefaultBytes);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.DefaultNestedEnum);
-            Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.DefaultForeignEnum);
-            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.DefaultImportEnum);
-
-            Assert.AreEqual("424", message.DefaultStringPiece);
-            Assert.AreEqual("425", message.DefaultCord);
-
-            Assert.IsFalse(message.HasOneofUint32);
-            Assert.IsFalse(message.HasOneofNestedMessage);
-            Assert.IsFalse(message.HasOneofString);
-            Assert.IsTrue(message.HasOneofBytes);
-
-            Assert.AreEqual(ToBytes("604"), message.OneofBytes);
-        }
-
-        internal static void AssertClear(TestAllTypes message)
-        {
-            // HasBlah() should initially be false for all optional fields.
-            Assert.IsFalse(message.HasOptionalInt32);
-            Assert.IsFalse(message.HasOptionalInt64);
-            Assert.IsFalse(message.HasOptionalUint32);
-            Assert.IsFalse(message.HasOptionalUint64);
-            Assert.IsFalse(message.HasOptionalSint32);
-            Assert.IsFalse(message.HasOptionalSint64);
-            Assert.IsFalse(message.HasOptionalFixed32);
-            Assert.IsFalse(message.HasOptionalFixed64);
-            Assert.IsFalse(message.HasOptionalSfixed32);
-            Assert.IsFalse(message.HasOptionalSfixed64);
-            Assert.IsFalse(message.HasOptionalFloat);
-            Assert.IsFalse(message.HasOptionalDouble);
-            Assert.IsFalse(message.HasOptionalBool);
-            Assert.IsFalse(message.HasOptionalString);
-            Assert.IsFalse(message.HasOptionalBytes);
-
-            Assert.IsFalse(message.HasOptionalGroup);
-            Assert.IsFalse(message.HasOptionalNestedMessage);
-            Assert.IsFalse(message.HasOptionalForeignMessage);
-            Assert.IsFalse(message.HasOptionalImportMessage);
-
-            Assert.IsFalse(message.HasOptionalNestedEnum);
-            Assert.IsFalse(message.HasOptionalForeignEnum);
-            Assert.IsFalse(message.HasOptionalImportEnum);
-
-            Assert.IsFalse(message.HasOptionalStringPiece);
-            Assert.IsFalse(message.HasOptionalCord);
-
-            // Optional fields without defaults are set to zero or something like it.
-            Assert.AreEqual(0, message.OptionalInt32);
-            Assert.AreEqual(0, message.OptionalInt64);
-            Assert.AreEqual(0u, message.OptionalUint32);
-            Assert.AreEqual(0u, message.OptionalUint64);
-            Assert.AreEqual(0, message.OptionalSint32);
-            Assert.AreEqual(0, message.OptionalSint64);
-            Assert.AreEqual(0u, message.OptionalFixed32);
-            Assert.AreEqual(0u, message.OptionalFixed64);
-            Assert.AreEqual(0, message.OptionalSfixed32);
-            Assert.AreEqual(0, message.OptionalSfixed64);
-            Assert.AreEqual(0, message.OptionalFloat);
-            Assert.AreEqual(0, message.OptionalDouble);
-            Assert.AreEqual(false, message.OptionalBool);
-            Assert.AreEqual("", message.OptionalString);
-            Assert.AreEqual(ByteString.Empty, message.OptionalBytes);
-
-            // Embedded messages should also be clear.
-            Assert.IsFalse(message.OptionalGroup.HasA);
-            Assert.IsFalse(message.OptionalNestedMessage.HasBb);
-            Assert.IsFalse(message.OptionalForeignMessage.HasC);
-            Assert.IsFalse(message.OptionalImportMessage.HasD);
-
-            Assert.AreEqual(0, message.OptionalGroup.A);
-            Assert.AreEqual(0, message.OptionalNestedMessage.Bb);
-            Assert.AreEqual(0, message.OptionalForeignMessage.C);
-            Assert.AreEqual(0, message.OptionalImportMessage.D);
-
-            // Enums without defaults are set to the first value in the enum.
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.OptionalNestedEnum);
-            Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.OptionalForeignEnum);
-            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.OptionalImportEnum);
-
-            Assert.AreEqual("", message.OptionalStringPiece);
-            Assert.AreEqual("", message.OptionalCord);
-
-            // Repeated fields are empty.
-            Assert.AreEqual(0, message.RepeatedInt32Count);
-            Assert.AreEqual(0, message.RepeatedInt64Count);
-            Assert.AreEqual(0, message.RepeatedUint32Count);
-            Assert.AreEqual(0, message.RepeatedUint64Count);
-            Assert.AreEqual(0, message.RepeatedSint32Count);
-            Assert.AreEqual(0, message.RepeatedSint64Count);
-            Assert.AreEqual(0, message.RepeatedFixed32Count);
-            Assert.AreEqual(0, message.RepeatedFixed64Count);
-            Assert.AreEqual(0, message.RepeatedSfixed32Count);
-            Assert.AreEqual(0, message.RepeatedSfixed64Count);
-            Assert.AreEqual(0, message.RepeatedFloatCount);
-            Assert.AreEqual(0, message.RepeatedDoubleCount);
-            Assert.AreEqual(0, message.RepeatedBoolCount);
-            Assert.AreEqual(0, message.RepeatedStringCount);
-            Assert.AreEqual(0, message.RepeatedBytesCount);
-
-            Assert.AreEqual(0, message.RepeatedGroupCount);
-            Assert.AreEqual(0, message.RepeatedNestedMessageCount);
-            Assert.AreEqual(0, message.RepeatedForeignMessageCount);
-            Assert.AreEqual(0, message.RepeatedImportMessageCount);
-            Assert.AreEqual(0, message.RepeatedNestedEnumCount);
-            Assert.AreEqual(0, message.RepeatedForeignEnumCount);
-            Assert.AreEqual(0, message.RepeatedImportEnumCount);
-
-            Assert.AreEqual(0, message.RepeatedStringPieceCount);
-            Assert.AreEqual(0, message.RepeatedCordCount);
-
-            // HasBlah() should also be false for all default fields.
-            Assert.IsFalse(message.HasDefaultInt32);
-            Assert.IsFalse(message.HasDefaultInt64);
-            Assert.IsFalse(message.HasDefaultUint32);
-            Assert.IsFalse(message.HasDefaultUint64);
-            Assert.IsFalse(message.HasDefaultSint32);
-            Assert.IsFalse(message.HasDefaultSint64);
-            Assert.IsFalse(message.HasDefaultFixed32);
-            Assert.IsFalse(message.HasDefaultFixed64);
-            Assert.IsFalse(message.HasDefaultSfixed32);
-            Assert.IsFalse(message.HasDefaultSfixed64);
-            Assert.IsFalse(message.HasDefaultFloat);
-            Assert.IsFalse(message.HasDefaultDouble);
-            Assert.IsFalse(message.HasDefaultBool);
-            Assert.IsFalse(message.HasDefaultString);
-            Assert.IsFalse(message.HasDefaultBytes);
-
-            Assert.IsFalse(message.HasDefaultNestedEnum);
-            Assert.IsFalse(message.HasDefaultForeignEnum);
-            Assert.IsFalse(message.HasDefaultImportEnum);
-
-            Assert.IsFalse(message.HasDefaultStringPiece);
-            Assert.IsFalse(message.HasDefaultCord);
-
-            // Fields with defaults have their default values (duh).
-            Assert.AreEqual(41, message.DefaultInt32);
-            Assert.AreEqual(42, message.DefaultInt64);
-            Assert.AreEqual(43u, message.DefaultUint32);
-            Assert.AreEqual(44u, message.DefaultUint64);
-            Assert.AreEqual(-45, message.DefaultSint32);
-            Assert.AreEqual(46, message.DefaultSint64);
-            Assert.AreEqual(47u, message.DefaultFixed32);
-            Assert.AreEqual(48u, message.DefaultFixed64);
-            Assert.AreEqual(49, message.DefaultSfixed32);
-            Assert.AreEqual(-50, message.DefaultSfixed64);
-            Assert.AreEqual(51.5f, message.DefaultFloat);
-            Assert.AreEqual(52e3d, message.DefaultDouble);
-            Assert.AreEqual(true, message.DefaultBool);
-            Assert.AreEqual("hello", message.DefaultString);
-            Assert.AreEqual(ToBytes("world"), message.DefaultBytes);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.DefaultNestedEnum);
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.DefaultForeignEnum);
-            Assert.AreEqual(ImportEnum.IMPORT_BAR, message.DefaultImportEnum);
-
-            Assert.AreEqual("abc", message.DefaultStringPiece);
-            Assert.AreEqual("123", message.DefaultCord);
-
-            Assert.IsFalse(message.HasOneofUint32);
-            Assert.IsFalse(message.HasOneofNestedMessage);
-            Assert.IsFalse(message.HasOneofString);
-            Assert.IsFalse(message.HasOneofBytes);
-        }
-
-        /// <summary>
-        /// Get a TestAllExtensions with all fields set as they would be by
-        /// SetAllExtensions(TestAllExtensions.Builder).
-        /// </summary>
-        internal static TestAllExtensions GetAllExtensionsSet()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            SetAllExtensions(builder);
-            return builder.Build();
-        }
-
-        public static TestPackedTypes GetPackedSet()
-        {
-            TestPackedTypes.Builder builder = TestPackedTypes.CreateBuilder();
-            SetPackedFields(builder);
-            return builder.Build();
-        }
-
-        public static TestPackedExtensions GetPackedExtensionsSet()
-        {
-            TestPackedExtensions.Builder builder = TestPackedExtensions.CreateBuilder();
-            SetPackedExtensions(builder);
-            return builder.Build();
-        }
-
-        /// <summary>
-        /// Sets every field of the specified builder to the values expected by
-        /// AssertAllExtensionsSet.
-        /// </summary>
-        internal static void SetAllExtensions(TestAllExtensions.Builder message)
-        {
-            message.SetExtension(Unittest.OptionalInt32Extension, 101);
-            message.SetExtension(Unittest.OptionalInt64Extension, 102L);
-            message.SetExtension(Unittest.OptionalUint32Extension, 103U);
-            message.SetExtension(Unittest.OptionalUint64Extension, 104UL);
-            message.SetExtension(Unittest.OptionalSint32Extension, 105);
-            message.SetExtension(Unittest.OptionalSint64Extension, 106L);
-            message.SetExtension(Unittest.OptionalFixed32Extension, 107U);
-            message.SetExtension(Unittest.OptionalFixed64Extension, 108UL);
-            message.SetExtension(Unittest.OptionalSfixed32Extension, 109);
-            message.SetExtension(Unittest.OptionalSfixed64Extension, 110L);
-            message.SetExtension(Unittest.OptionalFloatExtension, 111F);
-            message.SetExtension(Unittest.OptionalDoubleExtension, 112D);
-            message.SetExtension(Unittest.OptionalBoolExtension, true);
-            message.SetExtension(Unittest.OptionalStringExtension, "115");
-            message.SetExtension(Unittest.OptionalBytesExtension, ToBytes("116"));
-
-            message.SetExtension(Unittest.OptionalGroupExtension,
-                                 OptionalGroup_extension.CreateBuilder().SetA(117).Build());
-            message.SetExtension(Unittest.OptionalNestedMessageExtension,
-                                 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());
-            message.SetExtension(Unittest.OptionalForeignMessageExtension,
-                                 ForeignMessage.CreateBuilder().SetC(119).Build());
-            message.SetExtension(Unittest.OptionalImportMessageExtension,
-                                 ImportMessage.CreateBuilder().SetD(120).Build());
-
-            message.SetExtension(Unittest.OptionalNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAZ);
-            message.SetExtension(Unittest.OptionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
-            message.SetExtension(Unittest.OptionalImportEnumExtension, ImportEnum.IMPORT_BAZ);
-
-            message.SetExtension(Unittest.OptionalStringPieceExtension, "124");
-            message.SetExtension(Unittest.OptionalCordExtension, "125");
-
-            // -----------------------------------------------------------------
-
-            message.AddExtension(Unittest.RepeatedInt32Extension, 201);
-            message.AddExtension(Unittest.RepeatedInt64Extension, 202L);
-            message.AddExtension(Unittest.RepeatedUint32Extension, 203U);
-            message.AddExtension(Unittest.RepeatedUint64Extension, 204UL);
-            message.AddExtension(Unittest.RepeatedSint32Extension, 205);
-            message.AddExtension(Unittest.RepeatedSint64Extension, 206L);
-            message.AddExtension(Unittest.RepeatedFixed32Extension, 207U);
-            message.AddExtension(Unittest.RepeatedFixed64Extension, 208UL);
-            message.AddExtension(Unittest.RepeatedSfixed32Extension, 209);
-            message.AddExtension(Unittest.RepeatedSfixed64Extension, 210L);
-            message.AddExtension(Unittest.RepeatedFloatExtension, 211F);
-            message.AddExtension(Unittest.RepeatedDoubleExtension, 212D);
-            message.AddExtension(Unittest.RepeatedBoolExtension, true);
-            message.AddExtension(Unittest.RepeatedStringExtension, "215");
-            message.AddExtension(Unittest.RepeatedBytesExtension, ToBytes("216"));
-
-            message.AddExtension(Unittest.RepeatedGroupExtension,
-                                 RepeatedGroup_extension.CreateBuilder().SetA(217).Build());
-            message.AddExtension(Unittest.RepeatedNestedMessageExtension,
-                                 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());
-            message.AddExtension(Unittest.RepeatedForeignMessageExtension,
-                                 ForeignMessage.CreateBuilder().SetC(219).Build());
-            message.AddExtension(Unittest.RepeatedImportMessageExtension,
-                                 ImportMessage.CreateBuilder().SetD(220).Build());
-
-            message.AddExtension(Unittest.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAR);
-            message.AddExtension(Unittest.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAR);
-            message.AddExtension(Unittest.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAR);
-
-            message.AddExtension(Unittest.RepeatedStringPieceExtension, "224");
-            message.AddExtension(Unittest.RepeatedCordExtension, "225");
-
-            // Add a second one of each field.
-            message.AddExtension(Unittest.RepeatedInt32Extension, 301);
-            message.AddExtension(Unittest.RepeatedInt64Extension, 302L);
-            message.AddExtension(Unittest.RepeatedUint32Extension, 303U);
-            message.AddExtension(Unittest.RepeatedUint64Extension, 304UL);
-            message.AddExtension(Unittest.RepeatedSint32Extension, 305);
-            message.AddExtension(Unittest.RepeatedSint64Extension, 306L);
-            message.AddExtension(Unittest.RepeatedFixed32Extension, 307U);
-            message.AddExtension(Unittest.RepeatedFixed64Extension, 308UL);
-            message.AddExtension(Unittest.RepeatedSfixed32Extension, 309);
-            message.AddExtension(Unittest.RepeatedSfixed64Extension, 310L);
-            message.AddExtension(Unittest.RepeatedFloatExtension, 311F);
-            message.AddExtension(Unittest.RepeatedDoubleExtension, 312D);
-            message.AddExtension(Unittest.RepeatedBoolExtension, false);
-            message.AddExtension(Unittest.RepeatedStringExtension, "315");
-            message.AddExtension(Unittest.RepeatedBytesExtension, ToBytes("316"));
-
-            message.AddExtension(Unittest.RepeatedGroupExtension,
-                                 RepeatedGroup_extension.CreateBuilder().SetA(317).Build());
-            message.AddExtension(Unittest.RepeatedNestedMessageExtension,
-                                 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());
-            message.AddExtension(Unittest.RepeatedForeignMessageExtension,
-                                 ForeignMessage.CreateBuilder().SetC(319).Build());
-            message.AddExtension(Unittest.RepeatedImportMessageExtension,
-                                 ImportMessage.CreateBuilder().SetD(320).Build());
-
-            message.AddExtension(Unittest.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAZ);
-            message.AddExtension(Unittest.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
-            message.AddExtension(Unittest.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAZ);
-
-            message.AddExtension(Unittest.RepeatedStringPieceExtension, "324");
-            message.AddExtension(Unittest.RepeatedCordExtension, "325");
-
-            // -----------------------------------------------------------------
-
-            message.SetExtension(Unittest.DefaultInt32Extension, 401);
-            message.SetExtension(Unittest.DefaultInt64Extension, 402L);
-            message.SetExtension(Unittest.DefaultUint32Extension, 403U);
-            message.SetExtension(Unittest.DefaultUint64Extension, 404UL);
-            message.SetExtension(Unittest.DefaultSint32Extension, 405);
-            message.SetExtension(Unittest.DefaultSint64Extension, 406L);
-            message.SetExtension(Unittest.DefaultFixed32Extension, 407U);
-            message.SetExtension(Unittest.DefaultFixed64Extension, 408UL);
-            message.SetExtension(Unittest.DefaultSfixed32Extension, 409);
-            message.SetExtension(Unittest.DefaultSfixed64Extension, 410L);
-            message.SetExtension(Unittest.DefaultFloatExtension, 411F);
-            message.SetExtension(Unittest.DefaultDoubleExtension, 412D);
-            message.SetExtension(Unittest.DefaultBoolExtension, false);
-            message.SetExtension(Unittest.DefaultStringExtension, "415");
-            message.SetExtension(Unittest.DefaultBytesExtension, ToBytes("416"));
-
-            message.SetExtension(Unittest.DefaultNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO);
-            message.SetExtension(Unittest.DefaultForeignEnumExtension, ForeignEnum.FOREIGN_FOO);
-            message.SetExtension(Unittest.DefaultImportEnumExtension, ImportEnum.IMPORT_FOO);
-
-            message.SetExtension(Unittest.DefaultStringPieceExtension, "424");
-            message.SetExtension(Unittest.DefaultCordExtension, "425");
-
-            message.SetExtension(Unittest.OneofUint32Extension, 601U);
-            message.SetExtension(Unittest.OneofNestedMessageExtension,
-                TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(602).Build());
-            message.SetExtension(Unittest.OneofStringExtension, "603");
-            message.SetExtension(Unittest.OneofBytesExtension, ToBytes("604"));
-        }
-
-        internal static void ModifyRepeatedFields(TestAllTypes.Builder message)
-        {
-            message.SetRepeatedInt32(1, 501);
-            message.SetRepeatedInt64(1, 502);
-            message.SetRepeatedUint32(1, 503);
-            message.SetRepeatedUint64(1, 504);
-            message.SetRepeatedSint32(1, 505);
-            message.SetRepeatedSint64(1, 506);
-            message.SetRepeatedFixed32(1, 507);
-            message.SetRepeatedFixed64(1, 508);
-            message.SetRepeatedSfixed32(1, 509);
-            message.SetRepeatedSfixed64(1, 510);
-            message.SetRepeatedFloat(1, 511);
-            message.SetRepeatedDouble(1, 512);
-            message.SetRepeatedBool(1, true);
-            message.SetRepeatedString(1, "515");
-            message.SetRepeatedBytes(1, ToBytes("516"));
-
-            message.SetRepeatedGroup(1, TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(517).Build());
-            message.SetRepeatedNestedMessage(1, TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(518).Build());
-            message.SetRepeatedForeignMessage(1, ForeignMessage.CreateBuilder().SetC(519).Build());
-            message.SetRepeatedImportMessage(1, ImportMessage.CreateBuilder().SetD(520).Build());
-
-            message.SetRepeatedNestedEnum(1, TestAllTypes.Types.NestedEnum.FOO);
-            message.SetRepeatedForeignEnum(1, ForeignEnum.FOREIGN_FOO);
-            message.SetRepeatedImportEnum(1, ImportEnum.IMPORT_FOO);
-
-            message.SetRepeatedStringPiece(1, "524");
-            message.SetRepeatedCord(1, "525");
-        }
-
-        internal static void AssertRepeatedFieldsModified(TestAllTypes message)
-        {
-            // ModifyRepeatedFields only sets the second repeated element of each
-            // field.  In addition to verifying this, we also verify that the first
-            // element and size were *not* modified.
-            Assert.AreEqual(2, message.RepeatedInt32Count);
-            Assert.AreEqual(2, message.RepeatedInt64Count);
-            Assert.AreEqual(2, message.RepeatedUint32Count);
-            Assert.AreEqual(2, message.RepeatedUint64Count);
-            Assert.AreEqual(2, message.RepeatedSint32Count);
-            Assert.AreEqual(2, message.RepeatedSint64Count);
-            Assert.AreEqual(2, message.RepeatedFixed32Count);
-            Assert.AreEqual(2, message.RepeatedFixed64Count);
-            Assert.AreEqual(2, message.RepeatedSfixed32Count);
-            Assert.AreEqual(2, message.RepeatedSfixed64Count);
-            Assert.AreEqual(2, message.RepeatedFloatCount);
-            Assert.AreEqual(2, message.RepeatedDoubleCount);
-            Assert.AreEqual(2, message.RepeatedBoolCount);
-            Assert.AreEqual(2, message.RepeatedStringCount);
-            Assert.AreEqual(2, message.RepeatedBytesCount);
-
-            Assert.AreEqual(2, message.RepeatedGroupCount);
-            Assert.AreEqual(2, message.RepeatedNestedMessageCount);
-            Assert.AreEqual(2, message.RepeatedForeignMessageCount);
-            Assert.AreEqual(2, message.RepeatedImportMessageCount);
-            Assert.AreEqual(2, message.RepeatedNestedEnumCount);
-            Assert.AreEqual(2, message.RepeatedForeignEnumCount);
-            Assert.AreEqual(2, message.RepeatedImportEnumCount);
-
-            Assert.AreEqual(2, message.RepeatedStringPieceCount);
-            Assert.AreEqual(2, message.RepeatedCordCount);
-
-            Assert.AreEqual(201, message.GetRepeatedInt32(0));
-            Assert.AreEqual(202L, message.GetRepeatedInt64(0));
-            Assert.AreEqual(203U, message.GetRepeatedUint32(0));
-            Assert.AreEqual(204UL, message.GetRepeatedUint64(0));
-            Assert.AreEqual(205, message.GetRepeatedSint32(0));
-            Assert.AreEqual(206L, message.GetRepeatedSint64(0));
-            Assert.AreEqual(207U, message.GetRepeatedFixed32(0));
-            Assert.AreEqual(208UL, message.GetRepeatedFixed64(0));
-            Assert.AreEqual(209, message.GetRepeatedSfixed32(0));
-            Assert.AreEqual(210L, message.GetRepeatedSfixed64(0));
-            Assert.AreEqual(211F, message.GetRepeatedFloat(0));
-            Assert.AreEqual(212D, message.GetRepeatedDouble(0));
-            Assert.AreEqual(true, message.GetRepeatedBool(0));
-            Assert.AreEqual("215", message.GetRepeatedString(0));
-            Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));
-
-            Assert.AreEqual(217, message.GetRepeatedGroup(0).A);
-            Assert.AreEqual(218, message.GetRepeatedNestedMessage(0).Bb);
-            Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);
-            Assert.AreEqual(220, message.GetRepeatedImportMessage(0).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum(0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));
-            Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));
-
-            Assert.AreEqual("224", message.GetRepeatedStringPiece(0));
-            Assert.AreEqual("225", message.GetRepeatedCord(0));
-
-            // Actually verify the second (modified) elements now.
-            Assert.AreEqual(501, message.GetRepeatedInt32(1));
-            Assert.AreEqual(502L, message.GetRepeatedInt64(1));
-            Assert.AreEqual(503U, message.GetRepeatedUint32(1));
-            Assert.AreEqual(504UL, message.GetRepeatedUint64(1));
-            Assert.AreEqual(505, message.GetRepeatedSint32(1));
-            Assert.AreEqual(506L, message.GetRepeatedSint64(1));
-            Assert.AreEqual(507U, message.GetRepeatedFixed32(1));
-            Assert.AreEqual(508UL, message.GetRepeatedFixed64(1));
-            Assert.AreEqual(509, message.GetRepeatedSfixed32(1));
-            Assert.AreEqual(510L, message.GetRepeatedSfixed64(1));
-            Assert.AreEqual(511F, message.GetRepeatedFloat(1));
-            Assert.AreEqual(512D, message.GetRepeatedDouble(1));
-            Assert.AreEqual(true, message.GetRepeatedBool(1));
-            Assert.AreEqual("515", message.GetRepeatedString(1));
-            Assert.AreEqual(ToBytes("516"), message.GetRepeatedBytes(1));
-
-            Assert.AreEqual(517, message.GetRepeatedGroup(1).A);
-            Assert.AreEqual(518, message.GetRepeatedNestedMessage(1).Bb);
-            Assert.AreEqual(519, message.GetRepeatedForeignMessage(1).C);
-            Assert.AreEqual(520, message.GetRepeatedImportMessage(1).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetRepeatedNestedEnum(1));
-            Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetRepeatedForeignEnum(1));
-            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetRepeatedImportEnum(1));
-
-            Assert.AreEqual("524", message.GetRepeatedStringPiece(1));
-            Assert.AreEqual("525", message.GetRepeatedCord(1));
-        }
-
-        /// <summary>
-        /// Helper to assert that sequences are equal.
-        /// </summary>
-        internal static void AssertEqual<T>(IEnumerable<T> first, IEnumerable<T> second)
-        {
-            using (IEnumerator<T> firstEnumerator = first.GetEnumerator())
-            {
-                foreach (T secondElement in second)
-                {
-                    Assert.IsTrue(firstEnumerator.MoveNext(), "First enumerator ran out of elements too early.");
-                    Assert.AreEqual(firstEnumerator.Current, secondElement);
-                }
-                Assert.IsFalse(firstEnumerator.MoveNext(), "Second enumerator ran out of elements too early.");
-            }
-        }
-
-        internal static void AssertEqualBytes(byte[] expected, byte[] actual)
-        {
-            Assert.AreEqual(ByteString.CopyFrom(expected), ByteString.CopyFrom(actual));
-        }
-
-        internal static void AssertAllExtensionsSet(TestAllExtensions message)
-        {
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalInt32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalInt64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalUint32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalUint64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalSint32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalSint64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalFixed32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalFixed64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalSfixed32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalSfixed64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalFloatExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalDoubleExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalBoolExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalStringExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalBytesExtension));
-
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalGroupExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalNestedMessageExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalForeignMessageExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalImportMessageExtension));
-
-            Assert.IsTrue(message.GetExtension(Unittest.OptionalGroupExtension).HasA);
-            Assert.IsTrue(message.GetExtension(Unittest.OptionalNestedMessageExtension).HasBb);
-            Assert.IsTrue(message.GetExtension(Unittest.OptionalForeignMessageExtension).HasC);
-            Assert.IsTrue(message.GetExtension(Unittest.OptionalImportMessageExtension).HasD);
-
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalNestedEnumExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalForeignEnumExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalImportEnumExtension));
-
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalStringPieceExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.OptionalCordExtension));
-
-            Assert.AreEqual(101, message.GetExtension(Unittest.OptionalInt32Extension));
-            Assert.AreEqual(102L, message.GetExtension(Unittest.OptionalInt64Extension));
-            Assert.AreEqual(103U, message.GetExtension(Unittest.OptionalUint32Extension));
-            Assert.AreEqual(104UL, message.GetExtension(Unittest.OptionalUint64Extension));
-            Assert.AreEqual(105, message.GetExtension(Unittest.OptionalSint32Extension));
-            Assert.AreEqual(106L, message.GetExtension(Unittest.OptionalSint64Extension));
-            Assert.AreEqual(107U, message.GetExtension(Unittest.OptionalFixed32Extension));
-            Assert.AreEqual(108UL, message.GetExtension(Unittest.OptionalFixed64Extension));
-            Assert.AreEqual(109, message.GetExtension(Unittest.OptionalSfixed32Extension));
-            Assert.AreEqual(110L, message.GetExtension(Unittest.OptionalSfixed64Extension));
-            Assert.AreEqual(111F, message.GetExtension(Unittest.OptionalFloatExtension));
-            Assert.AreEqual(112D, message.GetExtension(Unittest.OptionalDoubleExtension));
-            Assert.AreEqual(true, message.GetExtension(Unittest.OptionalBoolExtension));
-            Assert.AreEqual("115", message.GetExtension(Unittest.OptionalStringExtension));
-            Assert.AreEqual(ToBytes("116"), message.GetExtension(Unittest.OptionalBytesExtension));
-
-            Assert.AreEqual(117, message.GetExtension(Unittest.OptionalGroupExtension).A);
-            Assert.AreEqual(118, message.GetExtension(Unittest.OptionalNestedMessageExtension).Bb);
-            Assert.AreEqual(119, message.GetExtension(Unittest.OptionalForeignMessageExtension).C);
-            Assert.AreEqual(120, message.GetExtension(Unittest.OptionalImportMessageExtension).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ,
-                            message.GetExtension(Unittest.OptionalNestedEnumExtension));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ,
-                            message.GetExtension(Unittest.OptionalForeignEnumExtension));
-            Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(Unittest.OptionalImportEnumExtension));
-
-            Assert.AreEqual("124", message.GetExtension(Unittest.OptionalStringPieceExtension));
-            Assert.AreEqual("125", message.GetExtension(Unittest.OptionalCordExtension));
-
-            // -----------------------------------------------------------------
-
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedInt32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedInt64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedUint32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedUint64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedSint32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedSint64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedFixed32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedFixed64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedSfixed32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedSfixed64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedFloatExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedDoubleExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedBoolExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedStringExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedBytesExtension));
-
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedGroupExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedNestedMessageExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedForeignMessageExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedImportMessageExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedNestedEnumExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedForeignEnumExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedImportEnumExtension));
-
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedStringPieceExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedCordExtension));
-
-            Assert.AreEqual(201, message.GetExtension(Unittest.RepeatedInt32Extension, 0));
-            Assert.AreEqual(202L, message.GetExtension(Unittest.RepeatedInt64Extension, 0));
-            Assert.AreEqual(203U, message.GetExtension(Unittest.RepeatedUint32Extension, 0));
-            Assert.AreEqual(204UL, message.GetExtension(Unittest.RepeatedUint64Extension, 0));
-            Assert.AreEqual(205, message.GetExtension(Unittest.RepeatedSint32Extension, 0));
-            Assert.AreEqual(206L, message.GetExtension(Unittest.RepeatedSint64Extension, 0));
-            Assert.AreEqual(207U, message.GetExtension(Unittest.RepeatedFixed32Extension, 0));
-            Assert.AreEqual(208UL, message.GetExtension(Unittest.RepeatedFixed64Extension, 0));
-            Assert.AreEqual(209, message.GetExtension(Unittest.RepeatedSfixed32Extension, 0));
-            Assert.AreEqual(210L, message.GetExtension(Unittest.RepeatedSfixed64Extension, 0));
-            Assert.AreEqual(211F, message.GetExtension(Unittest.RepeatedFloatExtension, 0));
-            Assert.AreEqual(212D, message.GetExtension(Unittest.RepeatedDoubleExtension, 0));
-            Assert.AreEqual(true, message.GetExtension(Unittest.RepeatedBoolExtension, 0));
-            Assert.AreEqual("215", message.GetExtension(Unittest.RepeatedStringExtension, 0));
-            Assert.AreEqual(ToBytes("216"), message.GetExtension(Unittest.RepeatedBytesExtension, 0));
-
-            Assert.AreEqual(217, message.GetExtension(Unittest.RepeatedGroupExtension, 0).A);
-            Assert.AreEqual(218, message.GetExtension(Unittest.RepeatedNestedMessageExtension, 0).Bb);
-            Assert.AreEqual(219, message.GetExtension(Unittest.RepeatedForeignMessageExtension, 0).C);
-            Assert.AreEqual(220, message.GetExtension(Unittest.RepeatedImportMessageExtension, 0).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,
-                            message.GetExtension(Unittest.RepeatedNestedEnumExtension, 0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR,
-                            message.GetExtension(Unittest.RepeatedForeignEnumExtension, 0));
-            Assert.AreEqual(ImportEnum.IMPORT_BAR,
-                            message.GetExtension(Unittest.RepeatedImportEnumExtension, 0));
-
-            Assert.AreEqual("224", message.GetExtension(Unittest.RepeatedStringPieceExtension, 0));
-            Assert.AreEqual("225", message.GetExtension(Unittest.RepeatedCordExtension, 0));
-
-            Assert.AreEqual(301, message.GetExtension(Unittest.RepeatedInt32Extension, 1));
-            Assert.AreEqual(302L, message.GetExtension(Unittest.RepeatedInt64Extension, 1));
-            Assert.AreEqual(303U, message.GetExtension(Unittest.RepeatedUint32Extension, 1));
-            Assert.AreEqual(304UL, message.GetExtension(Unittest.RepeatedUint64Extension, 1));
-            Assert.AreEqual(305, message.GetExtension(Unittest.RepeatedSint32Extension, 1));
-            Assert.AreEqual(306L, message.GetExtension(Unittest.RepeatedSint64Extension, 1));
-            Assert.AreEqual(307U, message.GetExtension(Unittest.RepeatedFixed32Extension, 1));
-            Assert.AreEqual(308UL, message.GetExtension(Unittest.RepeatedFixed64Extension, 1));
-            Assert.AreEqual(309, message.GetExtension(Unittest.RepeatedSfixed32Extension, 1));
-            Assert.AreEqual(310L, message.GetExtension(Unittest.RepeatedSfixed64Extension, 1));
-            Assert.AreEqual(311F, message.GetExtension(Unittest.RepeatedFloatExtension, 1));
-            Assert.AreEqual(312D, message.GetExtension(Unittest.RepeatedDoubleExtension, 1));
-            Assert.AreEqual(false, message.GetExtension(Unittest.RepeatedBoolExtension, 1));
-            Assert.AreEqual("315", message.GetExtension(Unittest.RepeatedStringExtension, 1));
-            Assert.AreEqual(ToBytes("316"), message.GetExtension(Unittest.RepeatedBytesExtension, 1));
-
-            Assert.AreEqual(317, message.GetExtension(Unittest.RepeatedGroupExtension, 1).A);
-            Assert.AreEqual(318, message.GetExtension(Unittest.RepeatedNestedMessageExtension, 1).Bb);
-            Assert.AreEqual(319, message.GetExtension(Unittest.RepeatedForeignMessageExtension, 1).C);
-            Assert.AreEqual(320, message.GetExtension(Unittest.RepeatedImportMessageExtension, 1).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ,
-                            message.GetExtension(Unittest.RepeatedNestedEnumExtension, 1));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ,
-                            message.GetExtension(Unittest.RepeatedForeignEnumExtension, 1));
-            Assert.AreEqual(ImportEnum.IMPORT_BAZ,
-                            message.GetExtension(Unittest.RepeatedImportEnumExtension, 1));
-
-            Assert.AreEqual("324", message.GetExtension(Unittest.RepeatedStringPieceExtension, 1));
-            Assert.AreEqual("325", message.GetExtension(Unittest.RepeatedCordExtension, 1));
-
-            // -----------------------------------------------------------------
-
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultInt32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultInt64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultUint32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultUint64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultSint32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultSint64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultFixed32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultFixed64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultSfixed32Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultSfixed64Extension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultFloatExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultDoubleExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultBoolExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultStringExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultBytesExtension));
-
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultNestedEnumExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultForeignEnumExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultImportEnumExtension));
-
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultStringPieceExtension));
-            Assert.IsTrue(message.HasExtension(Unittest.DefaultCordExtension));
-
-            Assert.AreEqual(401, message.GetExtension(Unittest.DefaultInt32Extension));
-            Assert.AreEqual(402L, message.GetExtension(Unittest.DefaultInt64Extension));
-            Assert.AreEqual(403U, message.GetExtension(Unittest.DefaultUint32Extension));
-            Assert.AreEqual(404UL, message.GetExtension(Unittest.DefaultUint64Extension));
-            Assert.AreEqual(405, message.GetExtension(Unittest.DefaultSint32Extension));
-            Assert.AreEqual(406L, message.GetExtension(Unittest.DefaultSint64Extension));
-            Assert.AreEqual(407U, message.GetExtension(Unittest.DefaultFixed32Extension));
-            Assert.AreEqual(408UL, message.GetExtension(Unittest.DefaultFixed64Extension));
-            Assert.AreEqual(409, message.GetExtension(Unittest.DefaultSfixed32Extension));
-            Assert.AreEqual(410L, message.GetExtension(Unittest.DefaultSfixed64Extension));
-            Assert.AreEqual(411F, message.GetExtension(Unittest.DefaultFloatExtension));
-            Assert.AreEqual(412D, message.GetExtension(Unittest.DefaultDoubleExtension));
-            Assert.AreEqual(false, message.GetExtension(Unittest.DefaultBoolExtension));
-            Assert.AreEqual("415", message.GetExtension(Unittest.DefaultStringExtension));
-            Assert.AreEqual(ToBytes("416"), message.GetExtension(Unittest.DefaultBytesExtension));
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
-                            message.GetExtension(Unittest.DefaultNestedEnumExtension));
-            Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetExtension(Unittest.DefaultForeignEnumExtension));
-            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(Unittest.DefaultImportEnumExtension));
-
-            Assert.AreEqual("424", message.GetExtension(Unittest.DefaultStringPieceExtension));
-            Assert.AreEqual("425", message.GetExtension(Unittest.DefaultCordExtension));
-
-            Assert.IsTrue(message.HasExtension(Unittest.OneofBytesExtension));
-            Assert.AreEqual(ToBytes("604"), message.GetExtension(Unittest.OneofBytesExtension));
-        }
-
-        /// <summary>
-        /// Modifies the repeated extensions of the given message to contain the values
-        /// expected by AssertRepeatedExtensionsModified.
-        /// </summary>
-        internal static void ModifyRepeatedExtensions(TestAllExtensions.Builder message)
-        {
-            message.SetExtension(Unittest.RepeatedInt32Extension, 1, 501);
-            message.SetExtension(Unittest.RepeatedInt64Extension, 1, 502L);
-            message.SetExtension(Unittest.RepeatedUint32Extension, 1, 503U);
-            message.SetExtension(Unittest.RepeatedUint64Extension, 1, 504UL);
-            message.SetExtension(Unittest.RepeatedSint32Extension, 1, 505);
-            message.SetExtension(Unittest.RepeatedSint64Extension, 1, 506L);
-            message.SetExtension(Unittest.RepeatedFixed32Extension, 1, 507U);
-            message.SetExtension(Unittest.RepeatedFixed64Extension, 1, 508UL);
-            message.SetExtension(Unittest.RepeatedSfixed32Extension, 1, 509);
-            message.SetExtension(Unittest.RepeatedSfixed64Extension, 1, 510L);
-            message.SetExtension(Unittest.RepeatedFloatExtension, 1, 511F);
-            message.SetExtension(Unittest.RepeatedDoubleExtension, 1, 512D);
-            message.SetExtension(Unittest.RepeatedBoolExtension, 1, true);
-            message.SetExtension(Unittest.RepeatedStringExtension, 1, "515");
-            message.SetExtension(Unittest.RepeatedBytesExtension, 1, ToBytes("516"));
-
-            message.SetExtension(Unittest.RepeatedGroupExtension, 1,
-                                 RepeatedGroup_extension.CreateBuilder().SetA(517).Build());
-            message.SetExtension(Unittest.RepeatedNestedMessageExtension, 1,
-                                 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(518).Build());
-            message.SetExtension(Unittest.RepeatedForeignMessageExtension, 1,
-                                 ForeignMessage.CreateBuilder().SetC(519).Build());
-            message.SetExtension(Unittest.RepeatedImportMessageExtension, 1,
-                                 ImportMessage.CreateBuilder().SetD(520).Build());
-
-            message.SetExtension(Unittest.RepeatedNestedEnumExtension, 1, TestAllTypes.Types.NestedEnum.FOO);
-            message.SetExtension(Unittest.RepeatedForeignEnumExtension, 1, ForeignEnum.FOREIGN_FOO);
-            message.SetExtension(Unittest.RepeatedImportEnumExtension, 1, ImportEnum.IMPORT_FOO);
-
-            message.SetExtension(Unittest.RepeatedStringPieceExtension, 1, "524");
-            message.SetExtension(Unittest.RepeatedCordExtension, 1, "525");
-        }
-
-        /// <summary>
-        /// Asserts that all repeated extensions are set to the values assigned by
-        /// SetAllExtensions follwed by ModifyRepeatedExtensions.
-        /// </summary>
-        internal static void AssertRepeatedExtensionsModified(TestAllExtensions message)
-        {
-            // ModifyRepeatedFields only sets the second repeated element of each
-            // field.  In addition to verifying this, we also verify that the first
-            // element and size were *not* modified.
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedInt32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedInt64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedUint32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedUint64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedSint32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedSint64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedFixed32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedFixed64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedSfixed32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedSfixed64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedFloatExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedDoubleExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedBoolExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedStringExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedBytesExtension));
-
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedGroupExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedNestedMessageExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedForeignMessageExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedImportMessageExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedNestedEnumExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedForeignEnumExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedImportEnumExtension));
-
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedStringPieceExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.RepeatedCordExtension));
-
-            Assert.AreEqual(201, message.GetExtension(Unittest.RepeatedInt32Extension, 0));
-            Assert.AreEqual(202L, message.GetExtension(Unittest.RepeatedInt64Extension, 0));
-            Assert.AreEqual(203U, message.GetExtension(Unittest.RepeatedUint32Extension, 0));
-            Assert.AreEqual(204UL, message.GetExtension(Unittest.RepeatedUint64Extension, 0));
-            Assert.AreEqual(205, message.GetExtension(Unittest.RepeatedSint32Extension, 0));
-            Assert.AreEqual(206L, message.GetExtension(Unittest.RepeatedSint64Extension, 0));
-            Assert.AreEqual(207U, message.GetExtension(Unittest.RepeatedFixed32Extension, 0));
-            Assert.AreEqual(208UL, message.GetExtension(Unittest.RepeatedFixed64Extension, 0));
-            Assert.AreEqual(209, message.GetExtension(Unittest.RepeatedSfixed32Extension, 0));
-            Assert.AreEqual(210L, message.GetExtension(Unittest.RepeatedSfixed64Extension, 0));
-            Assert.AreEqual(211F, message.GetExtension(Unittest.RepeatedFloatExtension, 0));
-            Assert.AreEqual(212D, message.GetExtension(Unittest.RepeatedDoubleExtension, 0));
-            Assert.AreEqual(true, message.GetExtension(Unittest.RepeatedBoolExtension, 0));
-            Assert.AreEqual("215", message.GetExtension(Unittest.RepeatedStringExtension, 0));
-            Assert.AreEqual(ToBytes("216"), message.GetExtension(Unittest.RepeatedBytesExtension, 0));
-
-            Assert.AreEqual(217, message.GetExtension(Unittest.RepeatedGroupExtension, 0).A);
-            Assert.AreEqual(218, message.GetExtension(Unittest.RepeatedNestedMessageExtension, 0).Bb);
-            Assert.AreEqual(219, message.GetExtension(Unittest.RepeatedForeignMessageExtension, 0).C);
-            Assert.AreEqual(220, message.GetExtension(Unittest.RepeatedImportMessageExtension, 0).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,
-                            message.GetExtension(Unittest.RepeatedNestedEnumExtension, 0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR,
-                            message.GetExtension(Unittest.RepeatedForeignEnumExtension, 0));
-            Assert.AreEqual(ImportEnum.IMPORT_BAR,
-                            message.GetExtension(Unittest.RepeatedImportEnumExtension, 0));
-
-            Assert.AreEqual("224", message.GetExtension(Unittest.RepeatedStringPieceExtension, 0));
-            Assert.AreEqual("225", message.GetExtension(Unittest.RepeatedCordExtension, 0));
-
-            // Actually verify the second (modified) elements now.
-            Assert.AreEqual(501, message.GetExtension(Unittest.RepeatedInt32Extension, 1));
-            Assert.AreEqual(502L, message.GetExtension(Unittest.RepeatedInt64Extension, 1));
-            Assert.AreEqual(503U, message.GetExtension(Unittest.RepeatedUint32Extension, 1));
-            Assert.AreEqual(504UL, message.GetExtension(Unittest.RepeatedUint64Extension, 1));
-            Assert.AreEqual(505, message.GetExtension(Unittest.RepeatedSint32Extension, 1));
-            Assert.AreEqual(506L, message.GetExtension(Unittest.RepeatedSint64Extension, 1));
-            Assert.AreEqual(507U, message.GetExtension(Unittest.RepeatedFixed32Extension, 1));
-            Assert.AreEqual(508UL, message.GetExtension(Unittest.RepeatedFixed64Extension, 1));
-            Assert.AreEqual(509, message.GetExtension(Unittest.RepeatedSfixed32Extension, 1));
-            Assert.AreEqual(510L, message.GetExtension(Unittest.RepeatedSfixed64Extension, 1));
-            Assert.AreEqual(511F, message.GetExtension(Unittest.RepeatedFloatExtension, 1));
-            Assert.AreEqual(512D, message.GetExtension(Unittest.RepeatedDoubleExtension, 1));
-            Assert.AreEqual(true, message.GetExtension(Unittest.RepeatedBoolExtension, 1));
-            Assert.AreEqual("515", message.GetExtension(Unittest.RepeatedStringExtension, 1));
-            Assert.AreEqual(ToBytes("516"), message.GetExtension(Unittest.RepeatedBytesExtension, 1));
-
-            Assert.AreEqual(517, message.GetExtension(Unittest.RepeatedGroupExtension, 1).A);
-            Assert.AreEqual(518, message.GetExtension(Unittest.RepeatedNestedMessageExtension, 1).Bb);
-            Assert.AreEqual(519, message.GetExtension(Unittest.RepeatedForeignMessageExtension, 1).C);
-            Assert.AreEqual(520, message.GetExtension(Unittest.RepeatedImportMessageExtension, 1).D);
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
-                            message.GetExtension(Unittest.RepeatedNestedEnumExtension, 1));
-            Assert.AreEqual(ForeignEnum.FOREIGN_FOO,
-                            message.GetExtension(Unittest.RepeatedForeignEnumExtension, 1));
-            Assert.AreEqual(ImportEnum.IMPORT_FOO,
-                            message.GetExtension(Unittest.RepeatedImportEnumExtension, 1));
-
-            Assert.AreEqual("524", message.GetExtension(Unittest.RepeatedStringPieceExtension, 1));
-            Assert.AreEqual("525", message.GetExtension(Unittest.RepeatedCordExtension, 1));
-        }
-
-        internal static void AssertExtensionsClear(TestAllExtensions message)
-        {
-            // HasBlah() should initially be false for all optional fields.
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalInt32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalInt64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalUint32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalUint64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalSint32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalSint64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalFixed32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalFixed64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalSfixed32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalSfixed64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalFloatExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalDoubleExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalBoolExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalStringExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalBytesExtension));
-
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalGroupExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalNestedMessageExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalForeignMessageExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalImportMessageExtension));
-
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalNestedEnumExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalForeignEnumExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalImportEnumExtension));
-
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalStringPieceExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OptionalCordExtension));
-
-            // Optional fields without defaults are set to zero or something like it.
-            Assert.AreEqual(0, message.GetExtension(Unittest.OptionalInt32Extension));
-            Assert.AreEqual(0L, message.GetExtension(Unittest.OptionalInt64Extension));
-            Assert.AreEqual(0U, message.GetExtension(Unittest.OptionalUint32Extension));
-            Assert.AreEqual(0UL, message.GetExtension(Unittest.OptionalUint64Extension));
-            Assert.AreEqual(0, message.GetExtension(Unittest.OptionalSint32Extension));
-            Assert.AreEqual(0L, message.GetExtension(Unittest.OptionalSint64Extension));
-            Assert.AreEqual(0U, message.GetExtension(Unittest.OptionalFixed32Extension));
-            Assert.AreEqual(0UL, message.GetExtension(Unittest.OptionalFixed64Extension));
-            Assert.AreEqual(0, message.GetExtension(Unittest.OptionalSfixed32Extension));
-            Assert.AreEqual(0L, message.GetExtension(Unittest.OptionalSfixed64Extension));
-            Assert.AreEqual(0F, message.GetExtension(Unittest.OptionalFloatExtension));
-            Assert.AreEqual(0D, message.GetExtension(Unittest.OptionalDoubleExtension));
-            Assert.AreEqual(false, message.GetExtension(Unittest.OptionalBoolExtension));
-            Assert.AreEqual("", message.GetExtension(Unittest.OptionalStringExtension));
-            Assert.AreEqual(ByteString.Empty, message.GetExtension(Unittest.OptionalBytesExtension));
-
-            // Embedded messages should also be clear.
-            Assert.IsFalse(message.GetExtension(Unittest.OptionalGroupExtension).HasA);
-            Assert.IsFalse(message.GetExtension(Unittest.OptionalNestedMessageExtension).HasBb);
-            Assert.IsFalse(message.GetExtension(Unittest.OptionalForeignMessageExtension).HasC);
-            Assert.IsFalse(message.GetExtension(Unittest.OptionalImportMessageExtension).HasD);
-
-            Assert.AreEqual(0, message.GetExtension(Unittest.OptionalGroupExtension).A);
-            Assert.AreEqual(0, message.GetExtension(Unittest.OptionalNestedMessageExtension).Bb);
-            Assert.AreEqual(0, message.GetExtension(Unittest.OptionalForeignMessageExtension).C);
-            Assert.AreEqual(0, message.GetExtension(Unittest.OptionalImportMessageExtension).D);
-
-            // Enums without defaults are set to the first value in the enum.
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,
-                            message.GetExtension(Unittest.OptionalNestedEnumExtension));
-            Assert.AreEqual(ForeignEnum.FOREIGN_FOO,
-                            message.GetExtension(Unittest.OptionalForeignEnumExtension));
-            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(Unittest.OptionalImportEnumExtension));
-
-            Assert.AreEqual("", message.GetExtension(Unittest.OptionalStringPieceExtension));
-            Assert.AreEqual("", message.GetExtension(Unittest.OptionalCordExtension));
-
-            // Repeated fields are empty.
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedInt32Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedInt64Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedUint32Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedUint64Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedSint32Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedSint64Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedFixed32Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedFixed64Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedSfixed32Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedSfixed64Extension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedFloatExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedDoubleExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedBoolExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedStringExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedBytesExtension));
-
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedGroupExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedNestedMessageExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedForeignMessageExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedImportMessageExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedNestedEnumExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedForeignEnumExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedImportEnumExtension));
-
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedStringPieceExtension));
-            Assert.AreEqual(0, message.GetExtensionCount(Unittest.RepeatedCordExtension));
-
-            // HasBlah() should also be false for all default fields.
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultInt32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultInt64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultUint32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultUint64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultSint32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultSint64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultFixed32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultFixed64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultSfixed32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultSfixed64Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultFloatExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultDoubleExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultBoolExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultStringExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultBytesExtension));
-
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultNestedEnumExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultForeignEnumExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultImportEnumExtension));
-
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultStringPieceExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.DefaultCordExtension));
-
-            // Fields with defaults have their default values (duh).
-            Assert.AreEqual(41, message.GetExtension(Unittest.DefaultInt32Extension));
-            Assert.AreEqual(42L, message.GetExtension(Unittest.DefaultInt64Extension));
-            Assert.AreEqual(43U, message.GetExtension(Unittest.DefaultUint32Extension));
-            Assert.AreEqual(44UL, message.GetExtension(Unittest.DefaultUint64Extension));
-            Assert.AreEqual(-45, message.GetExtension(Unittest.DefaultSint32Extension));
-            Assert.AreEqual(46L, message.GetExtension(Unittest.DefaultSint64Extension));
-            Assert.AreEqual(47U, message.GetExtension(Unittest.DefaultFixed32Extension));
-            Assert.AreEqual(48UL, message.GetExtension(Unittest.DefaultFixed64Extension));
-            Assert.AreEqual(49, message.GetExtension(Unittest.DefaultSfixed32Extension));
-            Assert.AreEqual(-50L, message.GetExtension(Unittest.DefaultSfixed64Extension));
-            Assert.AreEqual(51.5F, message.GetExtension(Unittest.DefaultFloatExtension));
-            Assert.AreEqual(52e3D, message.GetExtension(Unittest.DefaultDoubleExtension));
-            Assert.AreEqual(true, message.GetExtension(Unittest.DefaultBoolExtension));
-            Assert.AreEqual("hello", message.GetExtension(Unittest.DefaultStringExtension));
-            Assert.AreEqual(ToBytes("world"), message.GetExtension(Unittest.DefaultBytesExtension));
-
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,
-                            message.GetExtension(Unittest.DefaultNestedEnumExtension));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(Unittest.DefaultForeignEnumExtension));
-            Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetExtension(Unittest.DefaultImportEnumExtension));
-
-            Assert.AreEqual("abc", message.GetExtension(Unittest.DefaultStringPieceExtension));
-            Assert.AreEqual("123", message.GetExtension(Unittest.DefaultCordExtension));
-
-            Assert.IsFalse(message.HasExtension(Unittest.OneofUint32Extension));
-            Assert.IsFalse(message.HasExtension(Unittest.OneofNestedMessageExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OneofStringExtension));
-            Assert.IsFalse(message.HasExtension(Unittest.OneofBytesExtension));
-        }
-
-        /// <summary>
-        /// Set every field of the specified message to a unique value.
-        /// </summary>
-        public static void SetPackedFields(TestPackedTypes.Builder message)
-        {
-            message.AddPackedInt32(601);
-            message.AddPackedInt64(602);
-            message.AddPackedUint32(603);
-            message.AddPackedUint64(604);
-            message.AddPackedSint32(605);
-            message.AddPackedSint64(606);
-            message.AddPackedFixed32(607);
-            message.AddPackedFixed64(608);
-            message.AddPackedSfixed32(609);
-            message.AddPackedSfixed64(610);
-            message.AddPackedFloat(611);
-            message.AddPackedDouble(612);
-            message.AddPackedBool(true);
-            message.AddPackedEnum(ForeignEnum.FOREIGN_BAR);
-            // Add a second one of each field.
-            message.AddPackedInt32(701);
-            message.AddPackedInt64(702);
-            message.AddPackedUint32(703);
-            message.AddPackedUint64(704);
-            message.AddPackedSint32(705);
-            message.AddPackedSint64(706);
-            message.AddPackedFixed32(707);
-            message.AddPackedFixed64(708);
-            message.AddPackedSfixed32(709);
-            message.AddPackedSfixed64(710);
-            message.AddPackedFloat(711);
-            message.AddPackedDouble(712);
-            message.AddPackedBool(false);
-            message.AddPackedEnum(ForeignEnum.FOREIGN_BAZ);
-        }
-
-        /// <summary>
-        /// Asserts that all the fields of the specified message are set to the values assigned
-        /// in SetPackedFields.
-        /// </summary>
-        public static void AssertPackedFieldsSet(TestPackedTypes message)
-        {
-            Assert.AreEqual(2, message.PackedInt32Count);
-            Assert.AreEqual(2, message.PackedInt64Count);
-            Assert.AreEqual(2, message.PackedUint32Count);
-            Assert.AreEqual(2, message.PackedUint64Count);
-            Assert.AreEqual(2, message.PackedSint32Count);
-            Assert.AreEqual(2, message.PackedSint64Count);
-            Assert.AreEqual(2, message.PackedFixed32Count);
-            Assert.AreEqual(2, message.PackedFixed64Count);
-            Assert.AreEqual(2, message.PackedSfixed32Count);
-            Assert.AreEqual(2, message.PackedSfixed64Count);
-            Assert.AreEqual(2, message.PackedFloatCount);
-            Assert.AreEqual(2, message.PackedDoubleCount);
-            Assert.AreEqual(2, message.PackedBoolCount);
-            Assert.AreEqual(2, message.PackedEnumCount);
-            Assert.AreEqual(601, message.GetPackedInt32(0));
-            Assert.AreEqual(602, message.GetPackedInt64(0));
-            Assert.AreEqual(603u, message.GetPackedUint32(0));
-            Assert.AreEqual(604u, message.GetPackedUint64(0));
-            Assert.AreEqual(605, message.GetPackedSint32(0));
-            Assert.AreEqual(606, message.GetPackedSint64(0));
-            Assert.AreEqual(607u, message.GetPackedFixed32(0));
-            Assert.AreEqual(608u, message.GetPackedFixed64(0));
-            Assert.AreEqual(609, message.GetPackedSfixed32(0));
-            Assert.AreEqual(610, message.GetPackedSfixed64(0));
-            Assert.AreEqual(611f, message.GetPackedFloat(0));
-            Assert.AreEqual(612d, message.GetPackedDouble(0));
-            Assert.AreEqual(true, message.GetPackedBool(0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetPackedEnum(0));
-            Assert.AreEqual(701, message.GetPackedInt32(1));
-            Assert.AreEqual(702, message.GetPackedInt64(1));
-            Assert.AreEqual(703u, message.GetPackedUint32(1));
-            Assert.AreEqual(704u, message.GetPackedUint64(1));
-            Assert.AreEqual(705, message.GetPackedSint32(1));
-            Assert.AreEqual(706, message.GetPackedSint64(1));
-            Assert.AreEqual(707u, message.GetPackedFixed32(1));
-            Assert.AreEqual(708u, message.GetPackedFixed64(1));
-            Assert.AreEqual(709, message.GetPackedSfixed32(1));
-            Assert.AreEqual(710, message.GetPackedSfixed64(1));
-            Assert.AreEqual(711f, message.GetPackedFloat(1));
-            Assert.AreEqual(712d, message.GetPackedDouble(1));
-            Assert.AreEqual(false, message.GetPackedBool(1));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetPackedEnum(1));
-        }
-        /// <summary>
-        /// Asserts that all the fields of the specified message are set to the values assigned
-        /// in SetPackedFields.
-        /// </summary>
-        public static void AssertUnpackedFieldsSet(TestUnpackedTypes message)
-        {
-            Assert.AreEqual(2, message.UnpackedInt32Count);
-            Assert.AreEqual(2, message.UnpackedInt64Count);
-            Assert.AreEqual(2, message.UnpackedUint32Count);
-            Assert.AreEqual(2, message.UnpackedUint64Count);
-            Assert.AreEqual(2, message.UnpackedSint32Count);
-            Assert.AreEqual(2, message.UnpackedSint64Count);
-            Assert.AreEqual(2, message.UnpackedFixed32Count);
-            Assert.AreEqual(2, message.UnpackedFixed64Count);
-            Assert.AreEqual(2, message.UnpackedSfixed32Count);
-            Assert.AreEqual(2, message.UnpackedSfixed64Count);
-            Assert.AreEqual(2, message.UnpackedFloatCount);
-            Assert.AreEqual(2, message.UnpackedDoubleCount);
-            Assert.AreEqual(2, message.UnpackedBoolCount);
-            Assert.AreEqual(2, message.UnpackedEnumCount);
-            Assert.AreEqual(601, message.GetUnpackedInt32(0));
-            Assert.AreEqual(602, message.GetUnpackedInt64(0));
-            Assert.AreEqual(603u, message.GetUnpackedUint32(0));
-            Assert.AreEqual(604u, message.GetUnpackedUint64(0));
-            Assert.AreEqual(605, message.GetUnpackedSint32(0));
-            Assert.AreEqual(606, message.GetUnpackedSint64(0));
-            Assert.AreEqual(607u, message.GetUnpackedFixed32(0));
-            Assert.AreEqual(608u, message.GetUnpackedFixed64(0));
-            Assert.AreEqual(609, message.GetUnpackedSfixed32(0));
-            Assert.AreEqual(610, message.GetUnpackedSfixed64(0));
-            Assert.AreEqual(611f, message.GetUnpackedFloat(0));
-            Assert.AreEqual(612d, message.GetUnpackedDouble(0));
-            Assert.AreEqual(true, message.GetUnpackedBool(0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetUnpackedEnum(0));
-            Assert.AreEqual(701, message.GetUnpackedInt32(1));
-            Assert.AreEqual(702, message.GetUnpackedInt64(1));
-            Assert.AreEqual(703u, message.GetUnpackedUint32(1));
-            Assert.AreEqual(704u, message.GetUnpackedUint64(1));
-            Assert.AreEqual(705, message.GetUnpackedSint32(1));
-            Assert.AreEqual(706, message.GetUnpackedSint64(1));
-            Assert.AreEqual(707u, message.GetUnpackedFixed32(1));
-            Assert.AreEqual(708u, message.GetUnpackedFixed64(1));
-            Assert.AreEqual(709, message.GetUnpackedSfixed32(1));
-            Assert.AreEqual(710, message.GetUnpackedSfixed64(1));
-            Assert.AreEqual(711f, message.GetUnpackedFloat(1));
-            Assert.AreEqual(712d, message.GetUnpackedDouble(1));
-            Assert.AreEqual(false, message.GetUnpackedBool(1));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetUnpackedEnum(1));
-        }
-
-        public static void SetPackedExtensions(TestPackedExtensions.Builder message)
-        {
-            message.AddExtension(Unittest.PackedInt32Extension, 601);
-            message.AddExtension(Unittest.PackedInt64Extension, 602L);
-            message.AddExtension(Unittest.PackedUint32Extension, 603U);
-            message.AddExtension(Unittest.PackedUint64Extension, 604UL);
-            message.AddExtension(Unittest.PackedSint32Extension, 605);
-            message.AddExtension(Unittest.PackedSint64Extension, 606L);
-            message.AddExtension(Unittest.PackedFixed32Extension, 607U);
-            message.AddExtension(Unittest.PackedFixed64Extension, 608UL);
-            message.AddExtension(Unittest.PackedSfixed32Extension, 609);
-            message.AddExtension(Unittest.PackedSfixed64Extension, 610L);
-            message.AddExtension(Unittest.PackedFloatExtension, 611F);
-            message.AddExtension(Unittest.PackedDoubleExtension, 612D);
-            message.AddExtension(Unittest.PackedBoolExtension, true);
-            message.AddExtension(Unittest.PackedEnumExtension, ForeignEnum.FOREIGN_BAR);
-            // Add a second one of each field.
-            message.AddExtension(Unittest.PackedInt32Extension, 701);
-            message.AddExtension(Unittest.PackedInt64Extension, 702L);
-            message.AddExtension(Unittest.PackedUint32Extension, 703U);
-            message.AddExtension(Unittest.PackedUint64Extension, 704UL);
-            message.AddExtension(Unittest.PackedSint32Extension, 705);
-            message.AddExtension(Unittest.PackedSint64Extension, 706L);
-            message.AddExtension(Unittest.PackedFixed32Extension, 707U);
-            message.AddExtension(Unittest.PackedFixed64Extension, 708UL);
-            message.AddExtension(Unittest.PackedSfixed32Extension, 709);
-            message.AddExtension(Unittest.PackedSfixed64Extension, 710L);
-            message.AddExtension(Unittest.PackedFloatExtension, 711F);
-            message.AddExtension(Unittest.PackedDoubleExtension, 712D);
-            message.AddExtension(Unittest.PackedBoolExtension, false);
-            message.AddExtension(Unittest.PackedEnumExtension, ForeignEnum.FOREIGN_BAZ);
-        }
-
-        public static void AssertPackedExtensionsSet(TestPackedExtensions message)
-        {
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedInt32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedInt64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedUint32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedUint64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedSint32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedSint64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedFixed32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedFixed64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedSfixed32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedSfixed64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedFloatExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedDoubleExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedBoolExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.PackedEnumExtension));
-            Assert.AreEqual(601, message.GetExtension(Unittest.PackedInt32Extension, 0));
-            Assert.AreEqual(602L, message.GetExtension(Unittest.PackedInt64Extension, 0));
-            Assert.AreEqual(603u, message.GetExtension(Unittest.PackedUint32Extension, 0));
-            Assert.AreEqual(604uL, message.GetExtension(Unittest.PackedUint64Extension, 0));
-            Assert.AreEqual(605, message.GetExtension(Unittest.PackedSint32Extension, 0));
-            Assert.AreEqual(606L, message.GetExtension(Unittest.PackedSint64Extension, 0));
-            Assert.AreEqual(607u, message.GetExtension(Unittest.PackedFixed32Extension, 0));
-            Assert.AreEqual(608uL, message.GetExtension(Unittest.PackedFixed64Extension, 0));
-            Assert.AreEqual(609, message.GetExtension(Unittest.PackedSfixed32Extension, 0));
-            Assert.AreEqual(610L, message.GetExtension(Unittest.PackedSfixed64Extension, 0));
-            Assert.AreEqual(611F, message.GetExtension(Unittest.PackedFloatExtension, 0));
-            Assert.AreEqual(612D, message.GetExtension(Unittest.PackedDoubleExtension, 0));
-            Assert.AreEqual(true, message.GetExtension(Unittest.PackedBoolExtension, 0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR,
-                            message.GetExtension(Unittest.PackedEnumExtension, 0));
-            Assert.AreEqual(701, message.GetExtension(Unittest.PackedInt32Extension, 1));
-            Assert.AreEqual(702L, message.GetExtension(Unittest.PackedInt64Extension, 1));
-            Assert.AreEqual(703u, message.GetExtension(Unittest.PackedUint32Extension, 1));
-            Assert.AreEqual(704uL, message.GetExtension(Unittest.PackedUint64Extension, 1));
-            Assert.AreEqual(705, message.GetExtension(Unittest.PackedSint32Extension, 1));
-            Assert.AreEqual(706L, message.GetExtension(Unittest.PackedSint64Extension, 1));
-            Assert.AreEqual(707u, message.GetExtension(Unittest.PackedFixed32Extension, 1));
-            Assert.AreEqual(708uL, message.GetExtension(Unittest.PackedFixed64Extension, 1));
-            Assert.AreEqual(709, message.GetExtension(Unittest.PackedSfixed32Extension, 1));
-            Assert.AreEqual(710L, message.GetExtension(Unittest.PackedSfixed64Extension, 1));
-            Assert.AreEqual(711F, message.GetExtension(Unittest.PackedFloatExtension, 1));
-            Assert.AreEqual(712D, message.GetExtension(Unittest.PackedDoubleExtension, 1));
-            Assert.AreEqual(false, message.GetExtension(Unittest.PackedBoolExtension, 1));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(Unittest.PackedEnumExtension, 1));
-        }
-
-        public static void AssertUnpackedExtensionsSet(TestUnpackedExtensions message)
-        {
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedInt32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedInt64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedUint32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedUint64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedSint32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedSint64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedFixed32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedFixed64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedSfixed32Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedSfixed64Extension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedFloatExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedDoubleExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedBoolExtension));
-            Assert.AreEqual(2, message.GetExtensionCount(Unittest.UnpackedEnumExtension));
-            Assert.AreEqual(601, message.GetExtension(Unittest.UnpackedInt32Extension, 0));
-            Assert.AreEqual(602L, message.GetExtension(Unittest.UnpackedInt64Extension, 0));
-            Assert.AreEqual(603u, message.GetExtension(Unittest.UnpackedUint32Extension, 0));
-            Assert.AreEqual(604uL, message.GetExtension(Unittest.UnpackedUint64Extension, 0));
-            Assert.AreEqual(605, message.GetExtension(Unittest.UnpackedSint32Extension, 0));
-            Assert.AreEqual(606L, message.GetExtension(Unittest.UnpackedSint64Extension, 0));
-            Assert.AreEqual(607u, message.GetExtension(Unittest.UnpackedFixed32Extension, 0));
-            Assert.AreEqual(608uL, message.GetExtension(Unittest.UnpackedFixed64Extension, 0));
-            Assert.AreEqual(609, message.GetExtension(Unittest.UnpackedSfixed32Extension, 0));
-            Assert.AreEqual(610L, message.GetExtension(Unittest.UnpackedSfixed64Extension, 0));
-            Assert.AreEqual(611F, message.GetExtension(Unittest.UnpackedFloatExtension, 0));
-            Assert.AreEqual(612D, message.GetExtension(Unittest.UnpackedDoubleExtension, 0));
-            Assert.AreEqual(true, message.GetExtension(Unittest.UnpackedBoolExtension, 0));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(Unittest.UnpackedEnumExtension, 0));
-            Assert.AreEqual(701, message.GetExtension(Unittest.UnpackedInt32Extension, 1));
-            Assert.AreEqual(702L, message.GetExtension(Unittest.UnpackedInt64Extension, 1));
-            Assert.AreEqual(703u, message.GetExtension(Unittest.UnpackedUint32Extension, 1));
-            Assert.AreEqual(704uL, message.GetExtension(Unittest.UnpackedUint64Extension, 1));
-            Assert.AreEqual(705, message.GetExtension(Unittest.UnpackedSint32Extension, 1));
-            Assert.AreEqual(706L, message.GetExtension(Unittest.UnpackedSint64Extension, 1));
-            Assert.AreEqual(707u, message.GetExtension(Unittest.UnpackedFixed32Extension, 1));
-            Assert.AreEqual(708uL, message.GetExtension(Unittest.UnpackedFixed64Extension, 1));
-            Assert.AreEqual(709, message.GetExtension(Unittest.UnpackedSfixed32Extension, 1));
-            Assert.AreEqual(710L, message.GetExtension(Unittest.UnpackedSfixed64Extension, 1));
-            Assert.AreEqual(711F, message.GetExtension(Unittest.UnpackedFloatExtension, 1));
-            Assert.AreEqual(712D, message.GetExtension(Unittest.UnpackedDoubleExtension, 1));
-            Assert.AreEqual(false, message.GetExtension(Unittest.UnpackedBoolExtension, 1));
-            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(Unittest.UnpackedEnumExtension, 1));
-        }
-
-        public static void AssertAtMostOneFieldSetOneof(TestOneof2 message)
-        {
-            int count = 0;
-            if (message.HasFooInt) { ++count; }
-            if (message.HasFooString) { ++count; }
-            if (message.HasFooCord) { ++count; }
-            if (message.HasFooStringPiece) { ++count; }
-            if (message.HasFooBytes) { ++count; }
-            if (message.HasFooEnum) { ++count; }
-            if (message.HasFooMessage) { ++count; }
-            if (message.HasFooGroup) { ++count; }
-            if (message.HasFooLazyMessage) { ++count; }
-            Assert.True(count <= 1);
-
-            count = 0;
-            if (message.HasBarInt) { ++count; }
-            if (message.HasBarString) { ++count; }
-            if (message.HasBarCord) { ++count; }
-            if (message.HasBarStringPiece) { ++count; }
-            if (message.HasBarBytes) { ++count; }
-            if (message.HasBarEnum) { ++count; }
-            Assert.True(count <= 1);
-
-            switch (message.FooCase)
-            {
-                case TestOneof2.FooOneofCase.FooInt:
-                    {
-                        Assert.True(message.HasFooInt);
-                        break;
-                    }
-                case TestOneof2.FooOneofCase.FooString:
-                    {
-                        Assert.True(message.HasFooString);
-                        break;
-                    }
-                case TestOneof2.FooOneofCase.FooCord:
-                    {
-                        Assert.True(message.HasFooCord);
-                        break;
-                    }
-                case TestOneof2.FooOneofCase.FooBytes:
-                    {
-                        Assert.True(message.HasFooBytes);
-                        break;
-                    }
-                case TestOneof2.FooOneofCase.FooEnum:
-                    {
-                        Assert.True(message.HasFooEnum);
-                        break;
-                    }
-                case TestOneof2.FooOneofCase.FooMessage:
-                    {
-                        Assert.True(message.HasFooMessage);
-                        break;
-                    }
-                case TestOneof2.FooOneofCase.FooGroup:
-                    {
-                        Assert.True(message.HasFooGroup);
-                        break;
-                    }
-                case TestOneof2.FooOneofCase.FooLazyMessage:
-                    {
-                        Assert.True(message.HasFooLazyMessage);
-                        break;
-                    }
-                case TestOneof2.FooOneofCase.None: { break; }
-            }
-        }
-
-        private static readonly string[] TestCultures = {"en-US", "en-GB", "fr-FR", "de-DE"};
-
-        public delegate void CultureAction();
-
-        public static void TestInMultipleCultures(CultureAction test)
-        {
-#if COMPACT_FRAMEWORK
-            test();
-#else
-            CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
-            foreach (string culture in TestCultures)
-            {
-                try
-                {
-                    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
-                    test();
-                }
-                finally
-                {
-                    Thread.CurrentThread.CurrentCulture = originalCulture;
-                }
-            }
-#endif
-        }
-
-        /// <summary>
-        /// Helper to construct a byte array from a bunch of bytes.
-        /// </summary>
-        internal static byte[] Bytes(params byte[] bytesAsInts)
-        {
-            byte[] bytes = new byte[bytesAsInts.Length];
-            for (int i = 0; i < bytesAsInts.Length; i++)
-            {
-                bytes[i] = (byte) bytesAsInts[i];
-            }
-            return bytes;
-        }
-    }
-}

+ 0 - 498
csharp/src/ProtocolBuffers.Test/TestWriterFormatJson.cs

@@ -1,498 +0,0 @@
-using System;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Text;
-using EnumOptions = Google.ProtocolBuffers.TestProtos.EnumOptions;
-using Google.ProtocolBuffers.DescriptorProtos;
-using Google.ProtocolBuffers.Serialization;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class TestWriterFormatJson
-    {
-        [Test]
-        public void Example_FromJson()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-
-            //3.5: builder.MergeFromJson(@"{""valid"":true}");
-            Extensions.MergeFromJson(builder, @"{""valid"":true}");
-            
-            TestXmlMessage message = builder.Build();
-            Assert.AreEqual(true, message.Valid);
-        }
-
-        [Test]
-        public void Example_ToJson()
-        {
-            TestXmlMessage message = 
-                TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .Build();
-
-            //3.5: string json = message.ToJson();
-            string json = Extensions.ToJson(message);
-
-            Assert.AreEqual(@"{""valid"":true}", json);
-        }
-
-        [Test]
-        public void Example_WriteJsonUsingICodedOutputStream()
-        {
-            TestXmlMessage message =
-                TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .Build();
-
-            using (TextWriter output = new StringWriter())
-            {
-                ICodedOutputStream writer = JsonFormatWriter.CreateInstance(output);
-                writer.WriteMessageStart();      //manually begin the message, output is '{'
-                
-                writer.Flush();
-                Assert.AreEqual("{", output.ToString());
-
-                ICodedOutputStream stream = writer;
-                message.WriteTo(stream);    //write the message normally
-
-                writer.Flush();
-                Assert.AreEqual(@"{""valid"":true", output.ToString());
-
-                writer.WriteMessageEnd();        //manually write the end message '}'
-                Assert.AreEqual(@"{""valid"":true}", output.ToString());
-            }
-        }
-
-        [Test]
-        public void Example_ReadJsonUsingICodedInputStream()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            ICodedInputStream reader = JsonFormatReader.CreateInstance(@"{""valid"":true}");
-
-            reader.ReadMessageStart();  //manually read the begin the message '{'
-
-            builder.MergeFrom(reader);  //write the message normally
-
-            reader.ReadMessageEnd();    //manually read the end message '}'
-        }
-
-        protected string Content;
-        [System.Diagnostics.DebuggerNonUserCode]
-        protected void FormatterAssert<TMessage>(TMessage message, params string[] expecting) where TMessage : IMessageLite
-        {
-            StringWriter sw = new StringWriter();
-            JsonFormatWriter.CreateInstance(sw).WriteMessage(message);
-            
-            Content = sw.ToString();
-
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            UnittestExtrasXmltest.RegisterAllExtensions(registry);
-
-            IMessageLite copy = 
-                JsonFormatReader.CreateInstance(Content)
-                .Merge(message.WeakCreateBuilderForType(), registry).WeakBuild();
-
-            Assert.AreEqual(typeof(TMessage), copy.GetType());
-            Assert.AreEqual(message, copy);
-            foreach (string expect in expecting)
-            {
-                Assert.IsTrue(Content.IndexOf(expect) >= 0);
-            }
-        }
-
-        [Test]
-        public void TestToJsonParseFromJson()
-        {
-            TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
-            string json = Extensions.ToJson(msg);
-            Assert.AreEqual("{\"default_bool\":true}", json);
-            TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), json).Build();
-            Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
-            Assert.AreEqual(msg, copy);
-        }
-
-        [Test]
-        public void TestToJsonParseFromJsonReader()
-        {
-            TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
-            string json = Extensions.ToJson(msg);
-            Assert.AreEqual("{\"default_bool\":true}", json);
-            TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), new StringReader(json)).Build();
-            Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
-            Assert.AreEqual(msg, copy);
-        }
-
-        [Test]
-        public void TestJsonFormatted()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .SetNumber(0x1010)
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder())
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE))
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE).AddOptions(EnumOptions.TWO))
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().SetBinary(ByteString.CopyFromUtf8("abc")))
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            JsonFormatWriter.CreateInstance(sw).Formatted()
-                .WriteMessage(message);
-
-            string json = sw.ToString();
-
-            TestXmlMessage copy = JsonFormatReader.CreateInstance(json)
-                .Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestEmptyMessage()
-        {
-            FormatterAssert(
-                TestXmlChild.CreateBuilder()
-                .Build(),
-                @"{}"
-                );
-        }
-        
-        [Test]
-        public void TestRepeatedField()
-        {
-            FormatterAssert(
-                TestXmlChild.CreateBuilder()
-                .AddOptions(EnumOptions.ONE)
-                .AddOptions(EnumOptions.TWO)
-                .Build(),
-                @"{""options"":[""ONE"",""TWO""]}"
-                );
-        }
-        
-        [Test]
-        public void TestNestedEmptyMessage()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetChild(TestXmlChild.CreateBuilder().Build())
-                .Build(),
-                @"{""child"":{}}"
-                );
-        }
-        
-        [Test]
-        public void TestNestedMessage()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.TWO).Build())
-                .Build(),
-                @"{""child"":{""options"":[""TWO""]}}"
-                );
-        }
-        
-        [Test]
-        public void TestBooleanTypes()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .Build(),
-                @"{""valid"":true}"
-                );
-        }
-        
-        [Test]
-        public void TestFullMessage()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .SetText("text")
-                .AddTextlines("a")
-                .AddTextlines("b")
-                .AddTextlines("c")
-                .SetNumber(0x1010101010)
-                .AddNumbers(1)
-                .AddNumbers(2)
-                .AddNumbers(3)
-                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
-                .Build(),
-                @"""text"":""text""",
-                @"[""a"",""b"",""c""]",
-                @"[1,2,3]",
-                @"""child"":{",
-                @"""children"":[{",
-                @"AA==",
-                @"AAA=",
-                @"AAAA",
-                0x1010101010L.ToString()
-                );
-        }
-        
-        [Test]
-        public void TestMessageWithXmlText()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetText("<text></text>")
-                .Build(),
-                @"{""text"":""<text><\/text>""}"
-                );
-        }
-        
-        [Test]
-        public void TestWithEscapeChars()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetText(" \t <- \"leading space and trailing\" -> \\ \xef54 \x0000 \xFF \xFFFF \b \f \r \n \t ")
-                .Build(),
-                "{\"text\":\" \\t <- \\\"leading space and trailing\\\" -> \\\\ \\uef54 \\u0000 \\u00ff \\uffff \\b \\f \\r \\n \\t \"}"
-                );
-        }
-        
-        [Test]
-        public void TestWithExtensionText()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetValid(false)
-                .SetExtension(UnittestExtrasXmltest.ExtensionText, " extension text value ! ")
-                .Build(),
-                @"{""valid"":false,""extension_text"":"" extension text value ! ""}"
-                );
-        }
-        
-        [Test]
-        public void TestWithExtensionNumber()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetExtension(UnittestExtrasXmltest.ExtensionMessage,
-                new TestXmlExtension.Builder().SetNumber(42).Build())
-                .Build(),
-                @"{""number"":42}"
-                );
-        }
-        
-        [Test]
-        public void TestWithExtensionArray()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 100)
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 101)
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 102)
-                .Build(),
-                @"{""extension_number"":[100,101,102]}"
-                );
-        }
-        
-        [Test]
-        public void TestWithExtensionEnum()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetExtension(UnittestExtrasXmltest.ExtensionEnum, EnumOptions.ONE)
-                .Build(),
-                @"{""extension_enum"":""ONE""}"
-                );
-        }
-        
-        [Test]
-        public void TestMessageWithExtensions()
-        {
-            FormatterAssert(
-                TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .SetText("text")
-                .SetExtension(UnittestExtrasXmltest.ExtensionText, "extension text")
-                .SetExtension(UnittestExtrasXmltest.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 100)
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 101)
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 102)
-                .SetExtension(UnittestExtrasXmltest.ExtensionEnum, EnumOptions.ONE)
-                .Build(),
-                @"""text"":""text""",
-                @"""valid"":true",
-                @"""extension_enum"":""ONE""",
-                @"""extension_text"":""extension text""",
-                @"""extension_number"":[100,101,102]",
-                @"""extension_message"":{""number"":42}"
-                );
-        }
-        
-        [Test]
-        public void TestMessageMissingExtensions()
-        {
-            TestXmlMessage original = TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .SetText("text")
-                .SetExtension(UnittestExtrasXmltest.ExtensionText, " extension text value ! ")
-                .SetExtension(UnittestExtrasXmltest.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 100)
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 101)
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 102)
-                .SetExtension(UnittestExtrasXmltest.ExtensionEnum, EnumOptions.ONE)
-                .Build();
-
-            TestXmlMessage message = original.ToBuilder()
-                .ClearExtension(UnittestExtrasXmltest.ExtensionText)
-                .ClearExtension(UnittestExtrasXmltest.ExtensionMessage)
-                .ClearExtension(UnittestExtrasXmltest.ExtensionNumber)
-                .ClearExtension(UnittestExtrasXmltest.ExtensionEnum)
-                .Build();
-
-            JsonFormatWriter writer = JsonFormatWriter.CreateInstance();
-            writer.WriteMessage(original);
-            Content = writer.ToString();
-
-            IMessageLite copy = JsonFormatReader.CreateInstance(Content)
-                .Merge(message.CreateBuilderForType()).Build();
-
-            Assert.AreNotEqual(original, message);
-            Assert.AreNotEqual(original, copy);
-            Assert.AreEqual(message, copy);
-        }
-        
-        [Test]
-        public void TestMergeFields()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            builder.MergeFrom(JsonFormatReader.CreateInstance("\"valid\": true"));
-            builder.MergeFrom(JsonFormatReader.CreateInstance("\"text\": \"text\", \"number\": \"411\""));
-            Assert.AreEqual(true, builder.Valid);
-            Assert.AreEqual("text", builder.Text);
-            Assert.AreEqual(411, builder.Number);
-        }
-        
-        [Test]
-        public void TestMessageArray()
-        {
-            JsonFormatWriter writer = JsonFormatWriter.CreateInstance().Formatted();
-            using (writer.StartArray())
-            {
-                writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(1).AddTextlines("a").Build());
-                writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(2).AddTextlines("b").Build());
-                writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(3).AddTextlines("c").Build());
-            }
-            string json = writer.ToString();
-            JsonFormatReader reader = JsonFormatReader.CreateInstance(json);
-            
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            int ordinal = 0;
-
-            foreach (JsonFormatReader r in reader.EnumerateArray())
-            {
-                r.Merge(builder);
-                Assert.AreEqual(++ordinal, builder.Number);
-            }
-            Assert.AreEqual(3, ordinal);
-            Assert.AreEqual(3, builder.TextlinesCount);
-        }
-        
-        [Test]
-        public void TestNestedMessageArray()
-        {
-            JsonFormatWriter writer = JsonFormatWriter.CreateInstance();
-            using (writer.StartArray())
-            {
-                using (writer.StartArray())
-                {
-                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(1).AddTextlines("a").Build());
-                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(2).AddTextlines("b").Build());
-                } 
-                using (writer.StartArray())
-                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(3).AddTextlines("c").Build());
-            }
-            string json = writer.ToString();
-            JsonFormatReader reader = JsonFormatReader.CreateInstance(json);
-
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            int ordinal = 0;
-
-            foreach (JsonFormatReader r in reader.EnumerateArray())
-                foreach (JsonFormatReader r2 in r.EnumerateArray())
-                {
-                    r2.Merge(builder);
-                    Assert.AreEqual(++ordinal, builder.Number);
-                }
-            Assert.AreEqual(3, ordinal);
-            Assert.AreEqual(3, builder.TextlinesCount);
-        }
-        
-        [Test]
-        public void TestReadWriteJsonWithoutRoot()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            TestXmlMessage message = builder.SetText("abc").SetNumber(123).Build();
-
-            string Json;
-            using (StringWriter sw = new StringWriter())
-            {
-                ICodedOutputStream output = JsonFormatWriter.CreateInstance(sw);
-
-                message.WriteTo(output);
-                output.Flush();
-                Json = sw.ToString();
-            }
-            Assert.AreEqual(@"""text"":""abc"",""number"":123", Json);
-
-            ICodedInputStream input = JsonFormatReader.CreateInstance(Json);
-            TestXmlMessage copy = TestXmlMessage.CreateBuilder().MergeFrom(input).Build();
-
-            Assert.AreEqual(message, copy);
-        }
-        
-        [Test]
-        public void TestRecursiveLimit()
-        {
-            StringBuilder sb = new StringBuilder(8192);
-            for (int i = 0; i < 80; i++)
-            {
-                sb.Append("{\"child\":");
-            }
-            Assert.Throws<RecursionLimitExceededException>(() => Extensions.MergeFromJson(new TestXmlRescursive.Builder(), sb.ToString()).Build());
-        }
-
-        [Test]
-        public void FailWithEmptyText()
-        {
-            Assert.Throws<FormatException>(() => JsonFormatReader.CreateInstance("").Merge(TestXmlMessage.CreateBuilder()));
-        }
-        
-        [Test]
-        public void FailWithUnexpectedValue()
-        {
-            Assert.Throws<FormatException>(() => JsonFormatReader.CreateInstance("{{}}").Merge(TestXmlMessage.CreateBuilder()));
-        }
-        
-        [Test]
-        public void FailWithUnQuotedName()
-        {
-            Assert.Throws<FormatException>(() => JsonFormatReader.CreateInstance("{name:{}}").Merge(TestXmlMessage.CreateBuilder()));
-        }
-        
-        [Test]
-        public void FailWithUnexpectedType()
-        {
-            Assert.Throws<FormatException>(() => JsonFormatReader.CreateInstance("{\"valid\":{}}").Merge(TestXmlMessage.CreateBuilder()));
-        }
-
-        // See issue 64 for background.
-        [Test]
-        public void ToJsonRequiringBufferExpansion()
-        {
-            string s = new string('.', 4086);
-            var opts = FileDescriptorProto.CreateBuilder()
-               .SetName(s)
-               .SetPackage("package")
-               .BuildPartial();
-
-            Assert.NotNull(Extensions.ToJson(opts));
-        }
-    }
-}

+ 0 - 468
csharp/src/ProtocolBuffers.Test/TestWriterFormatXml.cs

@@ -1,468 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-using System.Xml;
-using Google.ProtocolBuffers.Serialization;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class TestWriterFormatXml
-    {
-        [Test]
-        public void Example_FromXml()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-
-            XmlReader rdr = XmlReader.Create(new StringReader(@"<root><valid>true</valid></root>"));
-            //3.5: builder.MergeFromXml(rdr);
-            Extensions.MergeFromXml(builder, rdr);
-
-            TestXmlMessage message = builder.Build();
-            Assert.AreEqual(true, message.Valid);
-        }
-
-        [Test]
-        public void Example_ToXml()
-        {
-            TestXmlMessage message =
-                TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .Build();
-
-            //3.5: string Xml = message.ToXml();
-            string Xml = Extensions.ToXml(message);
-
-            Assert.AreEqual(@"<root><valid>true</valid></root>", Xml);
-        }
-
-        [Test]
-        public void Example_WriteXmlUsingICodedOutputStream()
-        {
-            TestXmlMessage message =
-                TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .Build();
-
-            using (TextWriter output = new StringWriter())
-            {
-                ICodedOutputStream writer = XmlFormatWriter.CreateInstance(output);
-                writer.WriteMessageStart();      //manually begin the message, output is '{'
-
-                ICodedOutputStream stream = writer;
-                message.WriteTo(stream);         //write the message normally
-
-                writer.WriteMessageEnd();        //manually write the end message '}'
-                Assert.AreEqual(@"<root><valid>true</valid></root>", output.ToString());
-            }
-        }
-
-        [Test]
-        public void Example_ReadXmlUsingICodedInputStream()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root><valid>true</valid></root>");
-
-            reader.ReadMessageStart();  //manually read the begin the message '{'
-
-            builder.MergeFrom(reader);  //read the message normally
-
-            reader.ReadMessageEnd();    //manually read the end message '}'
-        }
-
-        [Test]
-        public void TestToXmlParseFromXml()
-        {
-            TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
-            string xml = Extensions.ToXml(msg);
-            Assert.AreEqual("<root><default_bool>true</default_bool></root>", xml);
-            TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), XmlReader.Create(new StringReader(xml))).Build();
-            Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
-            Assert.AreEqual(msg, copy);
-        }
-
-        [Test]
-        public void TestToXmlParseFromXmlWithRootName()
-        {
-            TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();
-            string xml = Extensions.ToXml(msg, "message");
-            Assert.AreEqual("<message><default_bool>true</default_bool></message>", xml);
-            TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), "message", XmlReader.Create(new StringReader(xml))).Build();
-            Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);
-            Assert.AreEqual(msg, copy);
-        }
-
-        [Test]
-        public void TestEmptyMessage()
-        {
-            TestXmlChild message = TestXmlChild.CreateBuilder()
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlWriter xw = XmlWriter.Create(sw);
-
-            //When we call message.WriteTo, we are responsible for the root element
-            xw.WriteStartElement("root");
-            message.WriteTo(XmlFormatWriter.CreateInstance(xw));
-            xw.WriteEndElement();
-            xw.Flush();
-
-            string xml = sw.ToString();
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlChild copy = rdr.Merge(TestXmlChild.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-        [Test]
-        public void TestRepeatedField()
-        {
-            TestXmlChild message = TestXmlChild.CreateBuilder()
-                .AddOptions(EnumOptions.ONE)
-                .AddOptions(EnumOptions.TWO)
-                .Build();
-
-            //Allow the writer to write the root element
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlChild copy = rdr.Merge(TestXmlChild.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestNestedEmptyMessage()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetChild(TestXmlChild.CreateBuilder().Build())
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestNestedMessage()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.TWO).Build())
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestBooleanTypes()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestFullMessage()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .SetText("text")
-                .AddTextlines("a")
-                .AddTextlines("b")
-                .AddTextlines("c")
-                .SetNumber(0x1010101010)
-                .AddNumbers(1)
-                .AddNumbers(2)
-                .AddNumbers(3)
-                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlWriter xwtr = XmlWriter.Create(sw, new XmlWriterSettings {Indent = true, IndentChars = "  "});
-
-            XmlFormatWriter.CreateInstance(xwtr).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestFullMessageWithRichTypes()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetValid(true)
-                .SetText("text")
-                .AddTextlines("a")
-                .AddTextlines("b")
-                .AddTextlines("c")
-                .SetNumber(0x1010101010)
-                .AddNumbers(1)
-                .AddNumbers(2)
-                .AddNumbers(3)
-                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
-                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlWriter xwtr = XmlWriter.Create(sw, new XmlWriterSettings { Indent = true, IndentChars = "  " });
-
-            XmlFormatWriter.CreateInstance(xwtr)
-                .SetOptions(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputEnumValues)
-                .WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            rdr.Options = XmlReaderOptions.ReadNestedArrays;
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestFullMessageWithUnknownFields()
-        {
-            TestXmlMessage origial = TestXmlMessage.CreateBuilder()
-                    .SetValid(true)
-                    .SetText("text")
-                    .AddTextlines("a")
-                    .AddTextlines("b")
-                    .AddTextlines("c")
-                    .SetNumber(0x1010101010)
-                    .AddNumbers(1)
-                    .AddNumbers(2)
-                    .AddNumbers(3)
-                    .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))
-                    .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))
-                    .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))
-                .Build();
-            TestXmlNoFields message = TestXmlNoFields.CreateBuilder().MergeFrom(origial.ToByteArray()).Build();
-
-            Assert.AreEqual(0, message.AllFields.Count);
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw)
-                .SetOptions(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputEnumValues)
-                .WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            using (XmlReader x = XmlReader.Create(new StringReader(xml)))
-            {
-                x.MoveToContent();
-                Assert.AreEqual(XmlNodeType.Element, x.NodeType);
-                //should always be empty
-                Assert.IsTrue(x.IsEmptyElement ||
-                    (x.Read() && x.NodeType == XmlNodeType.EndElement)
-                    );
-            }
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            rdr.Options = XmlReaderOptions.ReadNestedArrays;
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(TestXmlMessage.DefaultInstance, copy);
-        }
-
-        [Test]
-        public void TestMessageWithXmlText()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetText("<text>").Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestXmlWithWhitespace()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetText(" \t <- leading space and trailing -> \r\n\t").Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestXmlWithExtensionText()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetExtension(UnittestExtrasXmltest.ExtensionText, " extension text value ! ")
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            UnittestExtrasXmltest.RegisterAllExtensions(registry);
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestXmlWithExtensionMessage()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetExtension(UnittestExtrasXmltest.ExtensionMessage,
-                new TestXmlExtension.Builder().SetNumber(42).Build()).Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            UnittestExtrasXmltest.RegisterAllExtensions(registry);
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestXmlWithExtensionArray()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 100)
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 101)
-                .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 102)
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            UnittestExtrasXmltest.RegisterAllExtensions(registry);
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestXmlWithExtensionEnum()
-        {
-            TestXmlMessage message = TestXmlMessage.CreateBuilder()
-                .SetExtension(UnittestExtrasXmltest.ExtensionEnum, EnumOptions.ONE)
-                .Build();
-
-            StringWriter sw = new StringWriter();
-            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);
-
-            string xml = sw.ToString();
-
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            UnittestExtrasXmltest.RegisterAllExtensions(registry);
-
-            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);
-            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestXmlReadEmptyRoot()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root/>");
-
-            reader.ReadMessageStart();  //manually read the begin the message '{'
-
-            builder.MergeFrom(reader);  //write the message normally
-
-            reader.ReadMessageEnd();    //manually read the end message '}'
-        }
-
-        [Test]
-        public void TestXmlReadEmptyChild()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root><text /></root>");
-
-            reader.ReadMessageStart();  //manually read the begin the message '{'
-
-            builder.MergeFrom(reader);  //write the message normally
-            Assert.IsTrue(builder.HasText);
-            Assert.AreEqual(String.Empty, builder.Text);
-        }
-
-        [Test]
-        public void TestXmlReadWriteWithoutRoot()
-        {
-            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();
-            TestXmlMessage message = builder.SetText("abc").SetNumber(123).Build();
-
-            string xml;
-            using (StringWriter sw = new StringWriter())
-            {
-                ICodedOutputStream output = XmlFormatWriter.CreateInstance(
-                    XmlWriter.Create(sw, new XmlWriterSettings() { ConformanceLevel = ConformanceLevel.Fragment }));
-
-                message.WriteTo(output);
-                output.Flush();
-                xml = sw.ToString();
-            }
-            Assert.AreEqual("<text>abc</text><number>123</number>", xml);
-
-            TestXmlMessage copy;
-            using (XmlReader xr = XmlReader.Create(new StringReader(xml), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }))
-            {
-                ICodedInputStream input = XmlFormatReader.CreateInstance(xr);
-                copy = TestXmlMessage.CreateBuilder().MergeFrom(input).Build();
-            }
-
-            Assert.AreEqual(message, copy);
-        }
-
-        [Test]
-        public void TestRecursiveLimit()
-        {
-            StringBuilder sb = new StringBuilder(8192);
-            for (int i = 0; i < 80; i++)
-            {
-                sb.Append("<child>");
-            }
-            Assert.Throws<RecursionLimitExceededException>(() => Extensions.MergeFromXml(new TestXmlRescursive.Builder(), "child", XmlReader.Create(new StringReader(sb.ToString()))).Build());
-        }
-    }
-}

+ 0 - 560
csharp/src/ProtocolBuffers.Test/TextFormatTest.cs

@@ -1,560 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.IO;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class TextFormatTest
-    {
-        private static readonly string AllFieldsSetText = TestResources.text_format_unittest_data;
-        private static readonly string AllExtensionsSetText = TestResources.text_format_unittest_extensions_data;
-
-        /// <summary>
-        /// Note that this is slightly different to the Java - 123.0 becomes 123, and 1.23E17 becomes 1.23E+17.
-        /// Both of these differences can be parsed by the Java and the C++, and we can parse their output too.
-        /// </summary>
-        private const string ExoticText =
-            "repeated_int32: -1\n" +
-            "repeated_int32: -2147483648\n" +
-            "repeated_int64: -1\n" +
-            "repeated_int64: -9223372036854775808\n" +
-            "repeated_uint32: 4294967295\n" +
-            "repeated_uint32: 2147483648\n" +
-            "repeated_uint64: 18446744073709551615\n" +
-            "repeated_uint64: 9223372036854775808\n" +
-            "repeated_double: 123\n" +
-            "repeated_double: 123.5\n" +
-            "repeated_double: 0.125\n" +
-            "repeated_double: 1.23E+17\n" +
-            "repeated_double: 1.235E+22\n" +
-            "repeated_double: 1.235E-18\n" +
-            "repeated_double: 123.456789\n" +
-            "repeated_double: Infinity\n" +
-            "repeated_double: -Infinity\n" +
-            "repeated_double: NaN\n" +
-            "repeated_string: \"\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"" +
-            "\\341\\210\\264\"\n" +
-            "repeated_bytes: \"\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"\\376\"\n";
-
-        private const string MessageSetText =
-            "[protobuf_unittest.TestMessageSetExtension1] {\n" +
-            "  i: 123\n" +
-            "}\n" +
-            "[protobuf_unittest.TestMessageSetExtension2] {\n" +
-            "  str: \"foo\"\n" +
-            "}\n";
-
-        /// <summary>
-        /// Print TestAllTypes and compare with golden file. 
-        /// </summary>
-        [Test]
-        public void PrintMessage()
-        {
-            TestUtil.TestInMultipleCultures(() =>
-            {
-                string text = TextFormat.PrintToString(TestUtil.GetAllSet());
-                Assert.AreEqual(AllFieldsSetText.Replace("\r\n", "\n").Trim(),
-                                text.Replace("\r\n", "\n").Trim());
-            });
-        }
-
-        /// <summary>
-        /// Tests that a builder prints the same way as a message.
-        /// </summary>
-        [Test]
-        public void PrintBuilder()
-        {
-            TestUtil.TestInMultipleCultures(() =>
-            {
-                string messageText = TextFormat.PrintToString(TestUtil.GetAllSet());
-                string builderText = TextFormat.PrintToString(TestUtil.GetAllSet().ToBuilder());
-                Assert.AreEqual(messageText, builderText);
-            });
-        }
-
-        /// <summary>
-        /// Print TestAllExtensions and compare with golden file.
-        /// </summary>
-        [Test]
-        public void PrintExtensions()
-        {
-            string text = TextFormat.PrintToString(TestUtil.GetAllExtensionsSet());
-
-            Assert.AreEqual(AllExtensionsSetText.Replace("\r\n", "\n").Trim(), text.Replace("\r\n", "\n").Trim());
-        }
-
-        /// <summary>
-        /// Test printing of unknown fields in a message.
-        /// </summary>
-        [Test]
-        public void PrintUnknownFields()
-        {
-            TestEmptyMessage message =
-                TestEmptyMessage.CreateBuilder()
-                    .SetUnknownFields(
-                        UnknownFieldSet.CreateBuilder()
-                            .AddField(5,
-                                      UnknownField.CreateBuilder()
-                                          .AddVarint(1)
-                                          .AddFixed32(2)
-                                          .AddFixed64(3)
-                                          .AddLengthDelimited(ByteString.CopyFromUtf8("4"))
-                                          .AddGroup(
-                                              UnknownFieldSet.CreateBuilder()
-                                                  .AddField(10,
-                                                            UnknownField.CreateBuilder()
-                                                                .AddVarint(5)
-                                                                .Build())
-                                                  .Build())
-                                          .Build())
-                            .AddField(8,
-                                      UnknownField.CreateBuilder()
-                                          .AddVarint(1)
-                                          .AddVarint(2)
-                                          .AddVarint(3)
-                                          .Build())
-                            .AddField(15,
-                                      UnknownField.CreateBuilder()
-                                          .AddVarint(0xABCDEF1234567890L)
-                                          .AddFixed32(0xABCD1234)
-                                          .AddFixed64(0xABCDEF1234567890L)
-                                          .Build())
-                            .Build())
-                    .Build();
-
-            Assert.AreEqual(
-                "5: 1\n" +
-                "5: 0x00000002\n" +
-                "5: 0x0000000000000003\n" +
-                "5: \"4\"\n" +
-                "5 {\n" +
-                "  10: 5\n" +
-                "}\n" +
-                "8: 1\n" +
-                "8: 2\n" +
-                "8: 3\n" +
-                "15: 12379813812177893520\n" +
-                "15: 0xabcd1234\n" +
-                "15: 0xabcdef1234567890\n",
-                TextFormat.PrintToString(message));
-        }
-
-        /// <summary>
-        /// Helper to construct a ByteString from a string containing only 8-bit
-        /// characters. The characters are converted directly to bytes, *not*
-        /// encoded using UTF-8.
-        /// </summary>
-        private static ByteString Bytes(string str)
-        {
-            byte[] bytes = new byte[str.Length];
-            for (int i = 0; i < bytes.Length; i++)
-                bytes[i] = (byte)str[i];
-            return ByteString.CopyFrom(bytes);
-        }
-
-        [Test]
-        public void PrintExotic()
-        {
-            IMessage message = TestAllTypes.CreateBuilder()
-                // Signed vs. unsigned numbers.
-                .AddRepeatedInt32(-1)
-                .AddRepeatedUint32(uint.MaxValue)
-                .AddRepeatedInt64(-1)
-                .AddRepeatedUint64(ulong.MaxValue)
-                .AddRepeatedInt32(1 << 31)
-                .AddRepeatedUint32(1U << 31)
-                .AddRepeatedInt64(1L << 63)
-                .AddRepeatedUint64(1UL << 63)
-
-                // Floats of various precisions and exponents.
-                .AddRepeatedDouble(123)
-                .AddRepeatedDouble(123.5)
-                .AddRepeatedDouble(0.125)
-                .AddRepeatedDouble(123e15)
-                .AddRepeatedDouble(123.5e20)
-                .AddRepeatedDouble(123.5e-20)
-                .AddRepeatedDouble(123.456789)
-                .AddRepeatedDouble(Double.PositiveInfinity)
-                .AddRepeatedDouble(Double.NegativeInfinity)
-                .AddRepeatedDouble(Double.NaN)
-
-                // Strings and bytes that needing escaping.
-                .AddRepeatedString("\0\u0001\u0007\b\f\n\r\t\v\\\'\"\u1234")
-                .AddRepeatedBytes(Bytes("\0\u0001\u0007\b\f\n\r\t\v\\\'\"\u00fe"))
-                .Build();
-
-            Assert.AreEqual(ExoticText, message.ToString());
-        }
-
-        [Test]
-        public void PrintMessageSet()
-        {
-            TestMessageSet messageSet =
-                TestMessageSet.CreateBuilder()
-                    .SetExtension(
-                        TestMessageSetExtension1.MessageSetExtension,
-                        TestMessageSetExtension1.CreateBuilder().SetI(123).Build())
-                    .SetExtension(
-                        TestMessageSetExtension2.MessageSetExtension,
-                        TestMessageSetExtension2.CreateBuilder().SetStr("foo").Build())
-                    .Build();
-
-            Assert.AreEqual(MessageSetText, messageSet.ToString());
-        }
-
-        // =================================================================
-
-        [Test]
-        public void Parse()
-        {
-            TestUtil.TestInMultipleCultures(() =>
-                                                {
-                                                    TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-                                                    TextFormat.Merge(AllFieldsSetText, builder);
-                                                    TestUtil.AssertAllFieldsSet(builder.Build());
-                                                });
-        }
-
-        [Test]
-        public void ParseReader()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TextFormat.Merge(new StringReader(AllFieldsSetText), builder);
-            TestUtil.AssertAllFieldsSet(builder.Build());
-        }
-
-        [Test]
-        public void ParseExtensions()
-        {
-            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
-            TextFormat.Merge(AllExtensionsSetText,
-                             TestUtil.CreateExtensionRegistry(),
-                             builder);
-            TestUtil.AssertAllExtensionsSet(builder.Build());
-        }
-
-        [Test]
-        public void ParseCompatibility()
-        {
-            string original = "repeated_float: inf\n" +
-                              "repeated_float: -inf\n" +
-                              "repeated_float: nan\n" +
-                              "repeated_float: inff\n" +
-                              "repeated_float: -inff\n" +
-                              "repeated_float: nanf\n" +
-                              "repeated_float: 1.0f\n" +
-                              "repeated_float: infinityf\n" +
-                              "repeated_float: -Infinityf\n" +
-                              "repeated_double: infinity\n" +
-                              "repeated_double: -infinity\n" +
-                              "repeated_double: nan\n";
-            string canonical = "repeated_float: Infinity\n" +
-                               "repeated_float: -Infinity\n" +
-                               "repeated_float: NaN\n" +
-                               "repeated_float: Infinity\n" +
-                               "repeated_float: -Infinity\n" +
-                               "repeated_float: NaN\n" +
-                               "repeated_float: 1\n" + // Java has 1.0; this is fine
-                               "repeated_float: Infinity\n" +
-                               "repeated_float: -Infinity\n" +
-                               "repeated_double: Infinity\n" +
-                               "repeated_double: -Infinity\n" +
-                               "repeated_double: NaN\n";
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TextFormat.Merge(original, builder);
-            Assert.AreEqual(canonical, builder.Build().ToString());
-        }
-
-        [Test]
-        public void ParseExotic()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TextFormat.Merge(ExoticText, builder);
-
-            // Too lazy to check things individually.  Don't try to debug this
-            // if testPrintExotic() is Assert.Failing.
-            Assert.AreEqual(ExoticText, builder.Build().ToString());
-        }
-
-        [Test]
-        public void ParseMessageSet()
-        {
-            ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();
-            extensionRegistry.Add(TestMessageSetExtension1.MessageSetExtension);
-            extensionRegistry.Add(TestMessageSetExtension2.MessageSetExtension);
-
-            TestMessageSet.Builder builder = TestMessageSet.CreateBuilder();
-            TextFormat.Merge(MessageSetText, extensionRegistry, builder);
-            TestMessageSet messageSet = builder.Build();
-
-            Assert.IsTrue(messageSet.HasExtension(TestMessageSetExtension1.MessageSetExtension));
-            Assert.AreEqual(123, messageSet.GetExtension(TestMessageSetExtension1.MessageSetExtension).I);
-            Assert.IsTrue(messageSet.HasExtension(TestMessageSetExtension2.MessageSetExtension));
-            Assert.AreEqual("foo", messageSet.GetExtension(TestMessageSetExtension2.MessageSetExtension).Str);
-        }
-
-        [Test]
-        public void ParseNumericEnum()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TextFormat.Merge("optional_nested_enum: 2", builder);
-            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, builder.OptionalNestedEnum);
-        }
-
-        [Test]
-        public void ParseAngleBrackets()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TextFormat.Merge("OptionalGroup: < a: 1 >", builder);
-            Assert.IsTrue(builder.HasOptionalGroup);
-            Assert.AreEqual(1, builder.OptionalGroup.A);
-        }
-
-        [Test]
-        public void ParseComment()
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TextFormat.Merge(
-                "# this is a comment\n" +
-                "optional_int32: 1  # another comment\n" +
-                "optional_int64: 2\n" +
-                "# EOF comment", builder);
-            Assert.AreEqual(1, builder.OptionalInt32);
-            Assert.AreEqual(2, builder.OptionalInt64);
-        }
-
-
-        private static void AssertParseError(string error, string text)
-        {
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            Exception exception = Assert.Throws<FormatException>(() => TextFormat.Merge(text, TestUtil.CreateExtensionRegistry(), builder));
-            Assert.AreEqual(error, exception.Message);
-        }
-
-        [Test]
-        public void ParseErrors()
-        {
-            AssertParseError(
-                "1:16: Expected \":\".",
-                "optional_int32 123");
-            AssertParseError(
-                "1:23: Expected identifier.",
-                "optional_nested_enum: ?");
-            AssertParseError(
-                "1:18: Couldn't parse integer: Number must be positive: -1",
-                "optional_uint32: -1");
-            AssertParseError(
-                "1:17: Couldn't parse integer: Number out of range for 32-bit signed " +
-                "integer: 82301481290849012385230157",
-                "optional_int32: 82301481290849012385230157");
-            AssertParseError(
-                "1:16: Expected \"true\" or \"false\".",
-                "optional_bool: maybe");
-            AssertParseError(
-                "1:18: Expected string.",
-                "optional_string: 123");
-            AssertParseError(
-                "1:18: String missing ending quote.",
-                "optional_string: \"ueoauaoe");
-            AssertParseError(
-                "1:18: String missing ending quote.",
-                "optional_string: \"ueoauaoe\n" +
-                "optional_int32: 123");
-            AssertParseError(
-                "1:18: Invalid escape sequence: '\\z'",
-                "optional_string: \"\\z\"");
-            AssertParseError(
-                "1:18: String missing ending quote.",
-                "optional_string: \"ueoauaoe\n" +
-                "optional_int32: 123");
-            AssertParseError(
-                "1:2: Extension \"nosuchext\" not found in the ExtensionRegistry.",
-                "[nosuchext]: 123");
-            AssertParseError(
-                "1:20: Extension \"protobuf_unittest.optional_int32_extension\" " +
-                "not found in the ExtensionRegistry.",
-                "[protobuf_unittest.optional_int32_extension]: 123");
-            AssertParseError(
-                "1:1: Message type \"protobuf_unittest.TestAllTypes\" has no field " +
-                "named \"nosuchfield\".",
-                "nosuchfield: 123");
-            AssertParseError(
-                "1:21: Expected \">\".",
-                "OptionalGroup < a: 1");
-            AssertParseError(
-                "1:23: Enum type \"protobuf_unittest.TestAllTypes.NestedEnum\" has no " +
-                "value named \"NO_SUCH_VALUE\".",
-                "optional_nested_enum: NO_SUCH_VALUE");
-            AssertParseError(
-                "1:23: Enum type \"protobuf_unittest.TestAllTypes.NestedEnum\" has no " +
-                "value with number 123.",
-                "optional_nested_enum: 123");
-
-            // Delimiters must match.
-            AssertParseError(
-                "1:22: Expected identifier.",
-                "OptionalGroup < a: 1 }");
-            AssertParseError(
-                "1:22: Expected identifier.",
-                "OptionalGroup { a: 1 >");
-        }
-
-        // =================================================================
-
-        private static ByteString Bytes(params byte[] bytes)
-        {
-            return ByteString.CopyFrom(bytes);
-        }
-
-        [Test]
-        public void Escape()
-        {
-            // Escape sequences.
-            Assert.AreEqual("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"",
-                            TextFormat.EscapeBytes(Bytes("\0\u0001\u0007\b\f\n\r\t\v\\\'\"")));
-            Assert.AreEqual("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"",
-                            TextFormat.EscapeText("\0\u0001\u0007\b\f\n\r\t\v\\\'\""));
-            Assert.AreEqual(Bytes("\0\u0001\u0007\b\f\n\r\t\v\\\'\""),
-                            TextFormat.UnescapeBytes("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\""));
-            Assert.AreEqual("\0\u0001\u0007\b\f\n\r\t\v\\\'\"",
-                            TextFormat.UnescapeText("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\""));
-
-            // Unicode handling.
-            Assert.AreEqual("\\341\\210\\264", TextFormat.EscapeText("\u1234"));
-            Assert.AreEqual("\\341\\210\\264", TextFormat.EscapeBytes(Bytes(0xe1, 0x88, 0xb4)));
-            Assert.AreEqual("\u1234", TextFormat.UnescapeText("\\341\\210\\264"));
-            Assert.AreEqual(Bytes(0xe1, 0x88, 0xb4), TextFormat.UnescapeBytes("\\341\\210\\264"));
-            Assert.AreEqual("\u1234", TextFormat.UnescapeText("\\xe1\\x88\\xb4"));
-            Assert.AreEqual(Bytes(0xe1, 0x88, 0xb4), TextFormat.UnescapeBytes("\\xe1\\x88\\xb4"));
-
-            // Errors.
-            Assert.Throws<FormatException>(() => TextFormat.UnescapeText("\\x"));
-            Assert.Throws<FormatException>(() => TextFormat.UnescapeText("\\z"));
-            Assert.Throws<FormatException>(() => TextFormat.UnescapeText("\\"));
-        }
-
-        [Test]
-        public void ParseInteger()
-        {
-            Assert.AreEqual(0, TextFormat.ParseInt32("0"));
-            Assert.AreEqual(1, TextFormat.ParseInt32("1"));
-            Assert.AreEqual(-1, TextFormat.ParseInt32("-1"));
-            Assert.AreEqual(12345, TextFormat.ParseInt32("12345"));
-            Assert.AreEqual(-12345, TextFormat.ParseInt32("-12345"));
-            Assert.AreEqual(2147483647, TextFormat.ParseInt32("2147483647"));
-            Assert.AreEqual(-2147483648, TextFormat.ParseInt32("-2147483648"));
-
-            Assert.AreEqual(0u, TextFormat.ParseUInt32("0"));
-            Assert.AreEqual(1u, TextFormat.ParseUInt32("1"));
-            Assert.AreEqual(12345u, TextFormat.ParseUInt32("12345"));
-            Assert.AreEqual(2147483647u, TextFormat.ParseUInt32("2147483647"));
-            Assert.AreEqual(2147483648U, TextFormat.ParseUInt32("2147483648"));
-            Assert.AreEqual(4294967295U, TextFormat.ParseUInt32("4294967295"));
-
-            Assert.AreEqual(0L, TextFormat.ParseInt64("0"));
-            Assert.AreEqual(1L, TextFormat.ParseInt64("1"));
-            Assert.AreEqual(-1L, TextFormat.ParseInt64("-1"));
-            Assert.AreEqual(12345L, TextFormat.ParseInt64("12345"));
-            Assert.AreEqual(-12345L, TextFormat.ParseInt64("-12345"));
-            Assert.AreEqual(2147483647L, TextFormat.ParseInt64("2147483647"));
-            Assert.AreEqual(-2147483648L, TextFormat.ParseInt64("-2147483648"));
-            Assert.AreEqual(4294967295L, TextFormat.ParseInt64("4294967295"));
-            Assert.AreEqual(4294967296L, TextFormat.ParseInt64("4294967296"));
-            Assert.AreEqual(9223372036854775807L, TextFormat.ParseInt64("9223372036854775807"));
-            Assert.AreEqual(-9223372036854775808L, TextFormat.ParseInt64("-9223372036854775808"));
-
-            Assert.AreEqual(0uL, TextFormat.ParseUInt64("0"));
-            Assert.AreEqual(1uL, TextFormat.ParseUInt64("1"));
-            Assert.AreEqual(12345uL, TextFormat.ParseUInt64("12345"));
-            Assert.AreEqual(2147483647uL, TextFormat.ParseUInt64("2147483647"));
-            Assert.AreEqual(4294967295uL, TextFormat.ParseUInt64("4294967295"));
-            Assert.AreEqual(4294967296uL, TextFormat.ParseUInt64("4294967296"));
-            Assert.AreEqual(9223372036854775807UL, TextFormat.ParseUInt64("9223372036854775807"));
-            Assert.AreEqual(9223372036854775808UL, TextFormat.ParseUInt64("9223372036854775808"));
-            Assert.AreEqual(18446744073709551615UL, TextFormat.ParseUInt64("18446744073709551615"));
-
-            // Hex
-            Assert.AreEqual(0x1234abcd, TextFormat.ParseInt32("0x1234abcd"));
-            Assert.AreEqual(-0x1234abcd, TextFormat.ParseInt32("-0x1234abcd"));
-            Assert.AreEqual(0xffffffffffffffffUL, TextFormat.ParseUInt64("0xffffffffffffffff"));
-            Assert.AreEqual(0x7fffffffffffffffL,
-                            TextFormat.ParseInt64("0x7fffffffffffffff"));
-
-            // Octal
-            Assert.AreEqual(342391, TextFormat.ParseInt32("01234567"));
-
-            // Out-of-range
-            Assert.Throws<FormatException>(() => TextFormat.ParseInt32("2147483648"));
-            Assert.Throws<FormatException>(() => TextFormat.ParseInt32("-2147483649"));
-            Assert.Throws<FormatException>(() => TextFormat.ParseUInt32("4294967296"));
-            Assert.Throws<FormatException>(() => TextFormat.ParseUInt32("-1"));
-            Assert.Throws<FormatException>(() => TextFormat.ParseInt64("9223372036854775808"));
-            Assert.Throws<FormatException>(() => TextFormat.ParseInt64("-9223372036854775809"));
-            Assert.Throws<FormatException>(() => TextFormat.ParseUInt64("18446744073709551616"));
-            Assert.Throws<FormatException>(() => TextFormat.ParseUInt64("-1"));
-            Assert.Throws<FormatException>(() => TextFormat.ParseInt32("abcd"));
-        }
-
-        [Test]
-        public void ParseLongString()
-        {
-            string longText =
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890" +
-                "123456789012345678901234567890123456789012345678901234567890";
-            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
-            TextFormat.Merge("optional_string: \"" + longText + "\"", builder);
-            Assert.AreEqual(longText, builder.OptionalString);
-        }
-    }
-}

+ 0 - 431
csharp/src/ProtocolBuffers.Test/UnknownFieldSetTest.cs

@@ -1,431 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos;
-using NUnit.Framework;
-
-namespace Google.ProtocolBuffers
-{
-    public class UnknownFieldSetTest
-    {
-        private readonly MessageDescriptor descriptor;
-        private readonly TestAllTypes allFields;
-        private readonly ByteString allFieldsData;
-
-        /// <summary>
-        /// An empty message that has been parsed from allFieldsData.  So, it has
-        /// unknown fields of every type.
-        /// </summary>
-        private readonly TestEmptyMessage emptyMessage;
-
-        private readonly UnknownFieldSet unknownFields;
-
-        public UnknownFieldSetTest()
-        {
-            descriptor = TestAllTypes.Descriptor;
-            allFields = TestUtil.GetAllSet();
-            allFieldsData = allFields.ToByteString();
-            emptyMessage = TestEmptyMessage.ParseFrom(allFieldsData);
-            unknownFields = emptyMessage.UnknownFields;
-        }
-
-        private UnknownField GetField(String name)
-        {
-            FieldDescriptor field = descriptor.FindDescriptor<FieldDescriptor>(name);
-            Assert.NotNull(field);
-            return unknownFields.FieldDictionary[field.FieldNumber];
-        }
-
-        /// <summary>
-        /// Constructs a protocol buffer which contains fields with all the same
-        /// numbers as allFieldsData except that each field is some other wire
-        /// type.
-        /// </summary>
-        private ByteString GetBizarroData()
-        {
-            UnknownFieldSet.Builder bizarroFields = UnknownFieldSet.CreateBuilder();
-
-            UnknownField varintField = UnknownField.CreateBuilder().AddVarint(1).Build();
-            UnknownField fixed32Field = UnknownField.CreateBuilder().AddFixed32(1).Build();
-
-            foreach (KeyValuePair<int, UnknownField> entry in unknownFields.FieldDictionary)
-            {
-                if (entry.Value.VarintList.Count == 0)
-                {
-                    // Original field is not a varint, so use a varint.
-                    bizarroFields.AddField(entry.Key, varintField);
-                }
-                else
-                {
-                    // Original field *is* a varint, so use something else.
-                    bizarroFields.AddField(entry.Key, fixed32Field);
-                }
-            }
-
-            return bizarroFields.Build().ToByteString();
-        }
-
-        // =================================================================
-
-        [Test]
-        public void Varint()
-        {
-            UnknownField field = GetField("optional_int32");
-            Assert.AreEqual(1, field.VarintList.Count);
-            Assert.AreEqual(allFields.OptionalInt32, (long) field.VarintList[0]);
-        }
-
-        [Test]
-        public void Fixed32()
-        {
-            UnknownField field = GetField("optional_fixed32");
-            Assert.AreEqual(1, field.Fixed32List.Count);
-            Assert.AreEqual(allFields.OptionalFixed32, (int) field.Fixed32List[0]);
-        }
-
-        [Test]
-        public void Fixed64()
-        {
-            UnknownField field = GetField("optional_fixed64");
-            Assert.AreEqual(1, field.Fixed64List.Count);
-            Assert.AreEqual((long)allFields.OptionalFixed64, (long)field.Fixed64List[0]);
-        }
-
-        [Test]
-        public void LengthDelimited()
-        {
-            UnknownField field = GetField("optional_bytes");
-            Assert.AreEqual(1, field.LengthDelimitedList.Count);
-            Assert.AreEqual(allFields.OptionalBytes, field.LengthDelimitedList[0]);
-        }
-
-        [Test]
-        public void Group()
-        {
-            FieldDescriptor nestedFieldDescriptor =
-                TestAllTypes.Types.OptionalGroup.Descriptor.FindDescriptor<FieldDescriptor>("a");
-            Assert.NotNull(nestedFieldDescriptor);
-
-            UnknownField field = GetField("optionalgroup");
-            Assert.AreEqual(1, field.GroupList.Count);
-
-            UnknownFieldSet group = field.GroupList[0];
-            Assert.AreEqual(1, group.FieldDictionary.Count);
-            Assert.IsTrue(group.HasField(nestedFieldDescriptor.FieldNumber));
-
-            UnknownField nestedField = group[nestedFieldDescriptor.FieldNumber];
-            Assert.AreEqual(1, nestedField.VarintList.Count);
-            Assert.AreEqual(allFields.OptionalGroup.A, (long) nestedField.VarintList[0]);
-        }
-
-        [Test]
-        public void Serialize()
-        {
-            // Check that serializing the UnknownFieldSet produces the original data again.
-            ByteString data = emptyMessage.ToByteString();
-            Assert.AreEqual(allFieldsData, data);
-        }
-
-        [Test]
-        public void CopyFrom()
-        {
-            TestEmptyMessage message =
-                TestEmptyMessage.CreateBuilder().MergeFrom(emptyMessage).Build();
-
-            Assert.AreEqual(emptyMessage.ToString(), message.ToString());
-        }
-
-        [Test]
-        public void MergeFrom()
-        {
-            TestEmptyMessage source =
-                TestEmptyMessage.CreateBuilder()
-                    .SetUnknownFields(
-                        UnknownFieldSet.CreateBuilder()
-                            .AddField(2,
-                                      UnknownField.CreateBuilder()
-                                          .AddVarint(2).Build())
-                            .AddField(3,
-                                      UnknownField.CreateBuilder()
-                                          .AddVarint(4).Build())
-                            .Build())
-                    .Build();
-            TestEmptyMessage destination =
-                TestEmptyMessage.CreateBuilder()
-                    .SetUnknownFields(
-                        UnknownFieldSet.CreateBuilder()
-                            .AddField(1,
-                                      UnknownField.CreateBuilder()
-                                          .AddVarint(1).Build())
-                            .AddField(3,
-                                      UnknownField.CreateBuilder()
-                                          .AddVarint(3).Build())
-                            .Build())
-                    .MergeFrom(source)
-                    .Build();
-
-            Assert.AreEqual(
-                "1: 1\n" +
-                "2: 2\n" +
-                "3: 3\n" +
-                "3: 4\n",
-                destination.ToString());
-        }
-
-        [Test]
-        public void Clear()
-        {
-            UnknownFieldSet fields =
-                UnknownFieldSet.CreateBuilder().MergeFrom(unknownFields).Clear().Build();
-            Assert.AreEqual(0, fields.FieldDictionary.Count);
-        }
-
-        [Test]
-        public void ClearMessage()
-        {
-            TestEmptyMessage message =
-                TestEmptyMessage.CreateBuilder().MergeFrom(emptyMessage).Clear().Build();
-            Assert.AreEqual(0, message.SerializedSize);
-        }
-
-        [Test]
-        public void ParseKnownAndUnknown()
-        {
-            // Test mixing known and unknown fields when parsing.
-
-            UnknownFieldSet fields =
-                UnknownFieldSet.CreateBuilder(unknownFields)
-                    .AddField(123456,
-                              UnknownField.CreateBuilder().AddVarint(654321).Build())
-                    .Build();
-
-            ByteString data = fields.ToByteString();
-            TestAllTypes destination = TestAllTypes.ParseFrom(data);
-
-            TestUtil.AssertAllFieldsSet(destination);
-            Assert.AreEqual(1, destination.UnknownFields.FieldDictionary.Count);
-
-            UnknownField field = destination.UnknownFields[123456];
-            Assert.AreEqual(1, field.VarintList.Count);
-            Assert.AreEqual(654321, (long) field.VarintList[0]);
-        }
-
-        [Test]
-        public void WrongTypeTreatedAsUnknown()
-        {
-            // Test that fields of the wrong wire type are treated like unknown fields
-            // when parsing.
-
-            ByteString bizarroData = GetBizarroData();
-            TestAllTypes allTypesMessage = TestAllTypes.ParseFrom(bizarroData);
-            TestEmptyMessage emptyMessage = TestEmptyMessage.ParseFrom(bizarroData);
-
-            // All fields should have been interpreted as unknown, so the debug strings
-            // should be the same.
-            Assert.AreEqual(emptyMessage.ToString(), allTypesMessage.ToString());
-        }
-
-        [Test]
-        public void UnknownExtensions()
-        {
-            // Make sure fields are properly parsed to the UnknownFieldSet even when
-            // they are declared as extension numbers.
-
-            TestEmptyMessageWithExtensions message =
-                TestEmptyMessageWithExtensions.ParseFrom(allFieldsData);
-
-            Assert.AreEqual(unknownFields.FieldDictionary.Count,
-                            message.UnknownFields.FieldDictionary.Count);
-            Assert.AreEqual(allFieldsData, message.ToByteString());
-        }
-
-        [Test]
-        public void WrongExtensionTypeTreatedAsUnknown()
-        {
-            // Test that fields of the wrong wire type are treated like unknown fields
-            // when parsing extensions.
-
-            ByteString bizarroData = GetBizarroData();
-            TestAllExtensions allExtensionsMessage = TestAllExtensions.ParseFrom(bizarroData);
-            TestEmptyMessage emptyMessage = TestEmptyMessage.ParseFrom(bizarroData);
-
-            // All fields should have been interpreted as unknown, so the debug strings
-            // should be the same.
-            Assert.AreEqual(emptyMessage.ToString(),
-                            allExtensionsMessage.ToString());
-        }
-
-        [Test]
-        public void ParseUnknownEnumValue()
-        {
-            FieldDescriptor singularField =
-                TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("optional_nested_enum");
-            FieldDescriptor repeatedField =
-                TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("repeated_nested_enum");
-            Assert.NotNull(singularField);
-            Assert.NotNull(repeatedField);
-
-            ByteString data =
-                UnknownFieldSet.CreateBuilder()
-                    .AddField(singularField.FieldNumber,
-                              UnknownField.CreateBuilder()
-                                  .AddVarint((int) TestAllTypes.Types.NestedEnum.BAR)
-                                  .AddVarint(5) // not valid
-                                  .Build())
-                    .AddField(repeatedField.FieldNumber,
-                              UnknownField.CreateBuilder()
-                                  .AddVarint((int) TestAllTypes.Types.NestedEnum.FOO)
-                                  .AddVarint(4) // not valid
-                                  .AddVarint((int) TestAllTypes.Types.NestedEnum.BAZ)
-                                  .AddVarint(6) // not valid
-                                  .Build())
-                    .Build()
-                    .ToByteString();
-
-            {
-                TestAllTypes message = TestAllTypes.ParseFrom(data);
-                Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,
-                                message.OptionalNestedEnum);
-                TestUtil.AssertEqual(new[] {TestAllTypes.Types.NestedEnum.FOO, TestAllTypes.Types.NestedEnum.BAZ},
-                                     message.RepeatedNestedEnumList);
-                TestUtil.AssertEqual(new[] {5UL}, message.UnknownFields[singularField.FieldNumber].VarintList);
-                TestUtil.AssertEqual(new[] {4UL, 6UL}, message.UnknownFields[repeatedField.FieldNumber].VarintList);
-            }
-
-            {
-                TestAllExtensions message =
-                    TestAllExtensions.ParseFrom(data, TestUtil.CreateExtensionRegistry());
-                Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,
-                                message.GetExtension(Unittest.OptionalNestedEnumExtension));
-                TestUtil.AssertEqual(new[] {TestAllTypes.Types.NestedEnum.FOO, TestAllTypes.Types.NestedEnum.BAZ},
-                                     message.GetExtension(Unittest.RepeatedNestedEnumExtension));
-                TestUtil.AssertEqual(new[] {5UL}, message.UnknownFields[singularField.FieldNumber].VarintList);
-                TestUtil.AssertEqual(new[] {4UL, 6UL}, message.UnknownFields[repeatedField.FieldNumber].VarintList);
-            }
-        }
-
-        [Test]
-        public void LargeVarint()
-        {
-            ByteString data =
-                UnknownFieldSet.CreateBuilder()
-                    .AddField(1,
-                              UnknownField.CreateBuilder()
-                                  .AddVarint(0x7FFFFFFFFFFFFFFFL)
-                                  .Build())
-                    .Build()
-                    .ToByteString();
-            UnknownFieldSet parsed = UnknownFieldSet.ParseFrom(data);
-            UnknownField field = parsed[1];
-            Assert.AreEqual(1, field.VarintList.Count);
-            Assert.AreEqual(0x7FFFFFFFFFFFFFFFUL, field.VarintList[0]);
-        }
-
-        [Test]
-        public void EqualsAndHashCode()
-        {
-            UnknownField fixed32Field = UnknownField.CreateBuilder().AddFixed32(1).Build();
-            UnknownField fixed64Field = UnknownField.CreateBuilder().AddFixed64(1).Build();
-            UnknownField varIntField = UnknownField.CreateBuilder().AddVarint(1).Build();
-            UnknownField lengthDelimitedField =
-                UnknownField.CreateBuilder().AddLengthDelimited(ByteString.Empty).Build();
-            UnknownField groupField = UnknownField.CreateBuilder().AddGroup(unknownFields).Build();
-
-            UnknownFieldSet a = UnknownFieldSet.CreateBuilder().AddField(1, fixed32Field).Build();
-            UnknownFieldSet b = UnknownFieldSet.CreateBuilder().AddField(1, fixed64Field).Build();
-            UnknownFieldSet c = UnknownFieldSet.CreateBuilder().AddField(1, varIntField).Build();
-            UnknownFieldSet d = UnknownFieldSet.CreateBuilder().AddField(1, lengthDelimitedField).Build();
-            UnknownFieldSet e = UnknownFieldSet.CreateBuilder().AddField(1, groupField).Build();
-
-            CheckEqualsIsConsistent(a);
-            CheckEqualsIsConsistent(b);
-            CheckEqualsIsConsistent(c);
-            CheckEqualsIsConsistent(d);
-            CheckEqualsIsConsistent(e);
-
-            CheckNotEqual(a, b);
-            CheckNotEqual(a, c);
-            CheckNotEqual(a, d);
-            CheckNotEqual(a, e);
-            CheckNotEqual(b, c);
-            CheckNotEqual(b, d);
-            CheckNotEqual(b, e);
-            CheckNotEqual(c, d);
-            CheckNotEqual(c, e);
-            CheckNotEqual(d, e);
-        }
-
-        /// <summary>
-        /// Asserts that the given field sets are not equal and have different
-        /// hash codes.
-        /// </summary>
-        /// <remarks>
-        /// It's valid for non-equal objects to have the same hash code, so
-        /// this test is stricter than it needs to be. However, this should happen
-        /// relatively rarely.
-        /// </remarks>
-        /// <param name="s1"></param>
-        /// <param name="s2"></param>
-        private static void CheckNotEqual(UnknownFieldSet s1, UnknownFieldSet s2)
-        {
-            String equalsError = string.Format("{0} should not be equal to {1}", s1, s2);
-            Assert.IsFalse(s1.Equals(s2), equalsError);
-            Assert.IsFalse(s2.Equals(s1), equalsError);
-
-            Assert.IsFalse(s1.GetHashCode() == s2.GetHashCode(),
-                           string.Format("{0} should have a different hash code from {1}", s1, s2));
-        }
-
-        /**
-     * Asserts that the given field sets are equal and have identical hash codes.
-     */
-
-        private static void CheckEqualsIsConsistent(UnknownFieldSet set)
-        {
-            // Object should be equal to itself.
-            Assert.AreEqual(set, set);
-
-            // Object should be equal to a copy of itself.
-            UnknownFieldSet copy = UnknownFieldSet.CreateBuilder(set).Build();
-            Assert.AreEqual(set, copy);
-            Assert.AreEqual(copy, set);
-            Assert.AreEqual(set.GetHashCode(), copy.GetHashCode());
-        }
-    }
-}

+ 2 - 253
csharp/src/ProtocolBuffers.Test/WireFormatTest.cs

@@ -34,13 +34,11 @@
 
 #endregion
 
-using System.IO;
 using System.Reflection;
-using Google.ProtocolBuffers.Descriptors;
-using Google.ProtocolBuffers.TestProtos;
+using Google.Protobuf.Descriptors;
 using NUnit.Framework;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     public class WireFormatTest
     {
@@ -58,254 +56,5 @@ namespace Google.ProtocolBuffers
                 Assert.AreEqual(mapping.WireType, WireFormat.GetWireType(fieldType));
             }
         }
-
-        [Test]
-        public void Serialization()
-        {
-            TestAllTypes message = TestUtil.GetAllSet();
-
-            ByteString rawBytes = message.ToByteString();
-            Assert.AreEqual(rawBytes.Length, message.SerializedSize);
-
-            TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);
-
-            TestUtil.AssertAllFieldsSet(message2);
-        }
-
-        [Test]
-        public void SerializationPacked()
-        {
-            TestPackedTypes message = TestUtil.GetPackedSet();
-            ByteString rawBytes = message.ToByteString();
-            Assert.AreEqual(rawBytes.Length, message.SerializedSize);
-            TestPackedTypes message2 = TestPackedTypes.ParseFrom(rawBytes);
-            TestUtil.AssertPackedFieldsSet(message2);
-        }
-
-        [Test]
-        public void SerializeExtensions()
-        {
-            // TestAllTypes and TestAllExtensions should have compatible wire formats,
-            // so if we serialize a TestAllExtensions then parse it as TestAllTypes
-            // it should work.
-            TestAllExtensions message = TestUtil.GetAllExtensionsSet();
-            ByteString rawBytes = message.ToByteString();
-            Assert.AreEqual(rawBytes.Length, message.SerializedSize);
-
-            TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);
-
-            TestUtil.AssertAllFieldsSet(message2);
-        }
-
-        [Test]
-        public void SerializePackedExtensions()
-        {
-            // TestPackedTypes and TestPackedExtensions should have compatible wire
-            // formats; check that they serialize to the same string.
-            TestPackedExtensions message = TestUtil.GetPackedExtensionsSet();
-            ByteString rawBytes = message.ToByteString();
-
-            TestPackedTypes message2 = TestUtil.GetPackedSet();
-            ByteString rawBytes2 = message2.ToByteString();
-
-            Assert.AreEqual(rawBytes, rawBytes2);
-        }
-
-        [Test]
-        public void SerializeDelimited()
-        {
-            MemoryStream stream = new MemoryStream();
-            TestUtil.GetAllSet().WriteDelimitedTo(stream);
-            stream.WriteByte(12);
-            TestUtil.GetPackedSet().WriteDelimitedTo(stream);
-            stream.WriteByte(34);
-
-            stream.Position = 0;
-
-            TestUtil.AssertAllFieldsSet(TestAllTypes.ParseDelimitedFrom(stream));
-            Assert.AreEqual(12, stream.ReadByte());
-            TestUtil.AssertPackedFieldsSet(TestPackedTypes.ParseDelimitedFrom(stream));
-            Assert.AreEqual(34, stream.ReadByte());
-            Assert.AreEqual(-1, stream.ReadByte());
-        }
-
-        [Test]
-        public void ParseExtensions()
-        {
-            // TestAllTypes and TestAllExtensions should have compatible wire formats,
-            // so if we serealize a TestAllTypes then parse it as TestAllExtensions
-            // it should work.
-
-            TestAllTypes message = TestUtil.GetAllSet();
-            ByteString rawBytes = message.ToByteString();
-
-            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();
-            TestUtil.RegisterAllExtensions(registry);
-            registry = registry.AsReadOnly();
-
-            TestAllExtensions message2 = TestAllExtensions.ParseFrom(rawBytes, registry);
-
-            TestUtil.AssertAllExtensionsSet(message2);
-        }
-
-        [Test]
-        public void ParsePackedExtensions()
-        {
-            // Ensure that packed extensions can be properly parsed.
-            TestPackedExtensions message = TestUtil.GetPackedExtensionsSet();
-            ByteString rawBytes = message.ToByteString();
-
-            ExtensionRegistry registry = TestUtil.CreateExtensionRegistry();
-
-            TestPackedExtensions message2 = TestPackedExtensions.ParseFrom(rawBytes, registry);
-            TestUtil.AssertPackedExtensionsSet(message2);
-        }
-
-        [Test]
-        public void ExtensionsSerializedSize()
-        {
-            Assert.IsTrue(TestUtil.GetAllSet().SerializedSize < TestUtil.GetAllExtensionsSet().SerializedSize);
-        }
-
-        private static void AssertFieldsInOrder(ByteString data)
-        {
-            CodedInputStream input = data.CreateCodedInput();
-            uint previousTag = 0;
-
-            uint tag;
-            string name;
-            while (input.ReadTag(out tag, out name))
-            {
-                Assert.IsTrue(tag > previousTag);
-                previousTag = tag;
-                input.SkipField();
-            }
-        }
-
-        [Test]
-        public void InterleavedFieldsAndExtensions()
-        {
-            // Tests that fields are written in order even when extension ranges
-            // are interleaved with field numbers.
-            ByteString data =
-                TestFieldOrderings.CreateBuilder()
-                    .SetMyInt(1)
-                    .SetMyString("foo")
-                    .SetMyFloat(1.0F)
-                    .SetExtension(Unittest.MyExtensionInt, 23)
-                    .SetExtension(Unittest.MyExtensionString, "bar")
-                    .Build().ToByteString();
-            AssertFieldsInOrder(data);
-
-            MessageDescriptor descriptor = TestFieldOrderings.Descriptor;
-            ByteString dynamic_data =
-                DynamicMessage.CreateBuilder(TestFieldOrderings.Descriptor)
-                    .SetField(descriptor.FindDescriptor<FieldDescriptor>("my_int"), 1L)
-                    .SetField(descriptor.FindDescriptor<FieldDescriptor>("my_string"), "foo")
-                    .SetField(descriptor.FindDescriptor<FieldDescriptor>("my_float"), 1.0F)
-                    .SetField(Unittest.MyExtensionInt.Descriptor, 23)
-                    .SetField(Unittest.MyExtensionString.Descriptor, "bar")
-                    .WeakBuild().ToByteString();
-            AssertFieldsInOrder(dynamic_data);
-        }
-
-        private const int UnknownTypeId = 1550055;
-        private static readonly int TypeId1 = TestMessageSetExtension1.Descriptor.Extensions[0].FieldNumber;
-        private static readonly int TypeId2 = TestMessageSetExtension2.Descriptor.Extensions[0].FieldNumber;
-
-        [Test]
-        public void SerializeMessageSet()
-        {
-            // Set up a TestMessageSet with two known messages and an unknown one.
-            TestMessageSet messageSet =
-                TestMessageSet.CreateBuilder()
-                    .SetExtension(
-                        TestMessageSetExtension1.MessageSetExtension,
-                        TestMessageSetExtension1.CreateBuilder().SetI(123).Build())
-                    .SetExtension(
-                        TestMessageSetExtension2.MessageSetExtension,
-                        TestMessageSetExtension2.CreateBuilder().SetStr("foo").Build())
-                    .SetUnknownFields(
-                        UnknownFieldSet.CreateBuilder()
-                            .AddField(UnknownTypeId,
-                                      UnknownField.CreateBuilder()
-                                          .AddLengthDelimited(ByteString.CopyFromUtf8("bar"))
-                                          .Build())
-                            .Build())
-                    .Build();
-
-            ByteString data = messageSet.ToByteString();
-
-            // Parse back using RawMessageSet and check the contents.
-            RawMessageSet raw = RawMessageSet.ParseFrom(data);
-
-            Assert.AreEqual(0, raw.UnknownFields.FieldDictionary.Count);
-
-            Assert.AreEqual(3, raw.ItemCount);
-            Assert.AreEqual(TypeId1, raw.ItemList[0].TypeId);
-            Assert.AreEqual(TypeId2, raw.ItemList[1].TypeId);
-            Assert.AreEqual(UnknownTypeId, raw.ItemList[2].TypeId);
-
-            TestMessageSetExtension1 message1 = TestMessageSetExtension1.ParseFrom(raw.GetItem(0).Message.ToByteArray());
-            Assert.AreEqual(123, message1.I);
-
-            TestMessageSetExtension2 message2 = TestMessageSetExtension2.ParseFrom(raw.GetItem(1).Message.ToByteArray());
-            Assert.AreEqual("foo", message2.Str);
-
-            Assert.AreEqual("bar", raw.GetItem(2).Message.ToStringUtf8());
-        }
-
-        [Test]
-        public void ParseMessageSet()
-        {
-            ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();
-            extensionRegistry.Add(TestMessageSetExtension1.MessageSetExtension);
-            extensionRegistry.Add(TestMessageSetExtension2.MessageSetExtension);
-
-            // Set up a RawMessageSet with two known messages and an unknown one.
-            RawMessageSet raw =
-                RawMessageSet.CreateBuilder()
-                    .AddItem(
-                        RawMessageSet.Types.Item.CreateBuilder()
-                            .SetTypeId(TypeId1)
-                            .SetMessage(
-                                TestMessageSetExtension1.CreateBuilder()
-                                    .SetI(123)
-                                    .Build().ToByteString())
-                            .Build())
-                    .AddItem(
-                        RawMessageSet.Types.Item.CreateBuilder()
-                            .SetTypeId(TypeId2)
-                            .SetMessage(
-                                TestMessageSetExtension2.CreateBuilder()
-                                    .SetStr("foo")
-                                    .Build().ToByteString())
-                            .Build())
-                    .AddItem(
-                        RawMessageSet.Types.Item.CreateBuilder()
-                            .SetTypeId(UnknownTypeId)
-                            .SetMessage(ByteString.CopyFromUtf8("bar"))
-                            .Build())
-                    .Build();
-
-            ByteString data = raw.ToByteString();
-
-            // Parse as a TestMessageSet and check the contents.
-            TestMessageSet messageSet =
-                TestMessageSet.ParseFrom(data, extensionRegistry);
-
-            Assert.AreEqual(123, messageSet.GetExtension(TestMessageSetExtension1.MessageSetExtension).I);
-            Assert.AreEqual("foo", messageSet.GetExtension(TestMessageSetExtension2.MessageSetExtension).Str);
-
-            // Check for unknown field with type LENGTH_DELIMITED,
-            //   number UNKNOWN_TYPE_ID, and contents "bar".
-            UnknownFieldSet unknownFields = messageSet.UnknownFields;
-            Assert.AreEqual(1, unknownFields.FieldDictionary.Count);
-            Assert.IsTrue(unknownFields.HasField(UnknownTypeId));
-
-            UnknownField field = unknownFields[UnknownTypeId];
-            Assert.AreEqual(1, field.LengthDelimitedList.Count);
-            Assert.AreEqual("bar", field.LengthDelimitedList[0].ToStringUtf8());
-        }
     }
 }

+ 0 - 274
csharp/src/ProtocolBuffers/AbstractBuilder.cs

@@ -1,274 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using Google.ProtocolBuffers.Descriptors;
-
-namespace Google.ProtocolBuffers
-{
-    /// <summary>
-    /// Implementation of the non-generic IMessage interface as far as possible.
-    /// </summary>
-    public abstract partial class AbstractBuilder<TMessage, TBuilder> : AbstractBuilderLite<TMessage, TBuilder>,
-                                                                IBuilder<TMessage, TBuilder>
-        where TMessage : AbstractMessage<TMessage, TBuilder>
-        where TBuilder : AbstractBuilder<TMessage, TBuilder>
-    {
-        #region Unimplemented members of IBuilder
-
-        public abstract UnknownFieldSet UnknownFields { get; set; }
-        public abstract IDictionary<FieldDescriptor, object> AllFields { get; }
-        public abstract object this[FieldDescriptor field] { get; set; }
-        public abstract MessageDescriptor DescriptorForType { get; }
-        public abstract int GetRepeatedFieldCount(FieldDescriptor field);
-        public abstract object this[FieldDescriptor field, int index] { get; set; }
-        public abstract bool HasField(FieldDescriptor field);
-        public abstract bool HasOneof(OneofDescriptor oneof);
-        public abstract FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof);
-        public abstract IBuilder CreateBuilderForField(FieldDescriptor field);
-        public abstract TBuilder ClearField(FieldDescriptor field);
-        public abstract TBuilder ClearOneof(OneofDescriptor oneof);
-        public abstract TBuilder AddRepeatedField(FieldDescriptor field, object value);
-
-        #endregion
-
-        public TBuilder SetUnknownFields(UnknownFieldSet fields)
-        {
-            UnknownFields = fields;
-            return ThisBuilder;
-        }
-
-        public override TBuilder Clear()
-        {
-            foreach (FieldDescriptor field in AllFields.Keys)
-            {
-                ClearField(field);
-            }
-            return ThisBuilder;
-        }
-
-        public override sealed TBuilder MergeFrom(IMessageLite other)
-        {
-            if (other is IMessage)
-            {
-                return MergeFrom((IMessage) other);
-            }
-            throw new ArgumentException("MergeFrom(Message) can only merge messages of the same type.");
-        }
-
-        /// <summary>
-        /// Merge the specified other message into the message being
-        /// built. Merging occurs as follows. For each field:
-        /// For singular primitive fields, if the field is set in <paramref name="other"/>,
-        /// then <paramref name="other"/>'s value overwrites the value in this message.
-        /// For singular message fields, if the field is set in <paramref name="other"/>,
-        /// it is merged into the corresponding sub-message of this message using the same
-        /// merging rules.
-        /// For repeated fields, the elements in <paramref name="other"/> are concatenated
-        /// with the elements in this message.
-        /// </summary>
-        /// <param name="other"></param>
-        /// <returns></returns>
-        public abstract TBuilder MergeFrom(TMessage other);
-
-        public virtual TBuilder MergeFrom(IMessage other)
-        {
-            if (other.DescriptorForType != DescriptorForType)
-            {
-                throw new ArgumentException("MergeFrom(IMessage) can only merge messages of the same type.");
-            }
-
-            // Note:  We don't attempt to verify that other's fields have valid
-            //   types.  Doing so would be a losing battle.  We'd have to verify
-            //   all sub-messages as well, and we'd have to make copies of all of
-            //   them to insure that they don't change after verification (since
-            //   the Message interface itself cannot enforce immutability of
-            //   implementations).
-            // TODO(jonskeet):  Provide a function somewhere called MakeDeepCopy()
-            //   which allows people to make secure deep copies of messages.
-            foreach (KeyValuePair<FieldDescriptor, object> entry in other.AllFields)
-            {
-                FieldDescriptor field = entry.Key;
-                if (field.IsRepeated)
-                {
-                    // Concatenate repeated fields
-                    foreach (object element in (IEnumerable) entry.Value)
-                    {
-                        AddRepeatedField(field, element);
-                    }
-                }
-                else if (field.MappedType == MappedType.Message)
-                {
-                    // Merge singular messages
-                    IMessageLite existingValue = (IMessageLite) this[field];
-                    if (existingValue == existingValue.WeakDefaultInstanceForType)
-                    {
-                        this[field] = entry.Value;
-                    }
-                    else
-                    {
-                        this[field] = existingValue.WeakCreateBuilderForType()
-                            .WeakMergeFrom(existingValue)
-                            .WeakMergeFrom((IMessageLite) entry.Value)
-                            .WeakBuild();
-                    }
-                }
-                else
-                {
-                    // Overwrite simple values
-                    this[field] = entry.Value;
-                }
-            }
-
-            //Fix for unknown fields not merging, see java's AbstractMessage.Builder<T> line 236
-            MergeUnknownFields(other.UnknownFields);
-
-            return ThisBuilder;
-        }
-
-        public override TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry)
-        {
-            UnknownFieldSet.Builder unknownFields = UnknownFieldSet.CreateBuilder(UnknownFields);
-            unknownFields.MergeFrom(input, extensionRegistry, this);
-            UnknownFields = unknownFields.Build();
-            return ThisBuilder;
-        }
-
-        public virtual TBuilder MergeUnknownFields(UnknownFieldSet unknownFields)
-        {
-            UnknownFields = UnknownFieldSet.CreateBuilder(UnknownFields)
-                .MergeFrom(unknownFields)
-                .Build();
-            return ThisBuilder;
-        }
-
-        public virtual IBuilder SetField(FieldDescriptor field, object value)
-        {
-            this[field] = value;
-            return ThisBuilder;
-        }
-
-        public virtual IBuilder SetRepeatedField(FieldDescriptor field, int index, object value)
-        {
-            this[field, index] = value;
-            return ThisBuilder;
-        }
-
-        #region Explicit Implementations
-
-        IMessage IBuilder.WeakBuild()
-        {
-            return Build();
-        }
-
-        IBuilder IBuilder.WeakAddRepeatedField(FieldDescriptor field, object value)
-        {
-            return AddRepeatedField(field, value);
-        }
-
-        IBuilder IBuilder.WeakClear()
-        {
-            return Clear();
-        }
-
-        IBuilder IBuilder.WeakMergeFrom(IMessage message)
-        {
-            return MergeFrom(message);
-        }
-
-        IBuilder IBuilder.WeakMergeFrom(ICodedInputStream input)
-        {
-            return MergeFrom(input);
-        }
-
-        IBuilder IBuilder.WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry)
-        {
-            return MergeFrom(input, registry);
-        }
-
-        IBuilder IBuilder.WeakMergeFrom(ByteString data)
-        {
-            return MergeFrom(data);
-        }
-
-        IBuilder IBuilder.WeakMergeFrom(ByteString data, ExtensionRegistry registry)
-        {
-            return MergeFrom(data, registry);
-        }
-
-        IMessage IBuilder.WeakBuildPartial()
-        {
-            return BuildPartial();
-        }
-
-        IBuilder IBuilder.WeakClone()
-        {
-            return Clone();
-        }
-
-        IMessage IBuilder.WeakDefaultInstanceForType
-        {
-            get { return DefaultInstanceForType; }
-        }
-
-        IBuilder IBuilder.WeakClearField(FieldDescriptor field)
-        {
-            return ClearField(field);
-        }
-
-        IBuilder IBuilder.WeakClearOneof(OneofDescriptor oneof)
-        {
-            return ClearOneof(oneof);
-        }
-
-        #endregion
-
-        /// <summary>
-        /// Converts this builder to a string using <see cref="TextFormat" />.
-        /// </summary>
-        /// <remarks>
-        /// This method is not sealed (in the way that it is in <see cref="AbstractMessage{TMessage, TBuilder}" />
-        /// as it was added after earlier releases; some other implementations may already be overriding the
-        /// method.
-        /// </remarks>
-        public override string ToString()
-        {
-            return TextFormat.PrintToString(this);
-        }
-    }
-}

+ 0 - 264
csharp/src/ProtocolBuffers/AbstractBuilderLite.cs

@@ -1,264 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.IO;
-
-namespace Google.ProtocolBuffers
-{
-    /// <summary>
-    /// Implementation of the non-generic IMessage interface as far as possible.
-    /// </summary>
-    public abstract partial class AbstractBuilderLite<TMessage, TBuilder> : IBuilderLite<TMessage, TBuilder>
-        where TMessage : AbstractMessageLite<TMessage, TBuilder>
-        where TBuilder : AbstractBuilderLite<TMessage, TBuilder>
-    {
-        protected abstract TBuilder ThisBuilder { get; }
-
-        public abstract bool IsInitialized { get; }
-
-        public abstract TBuilder Clear();
-
-        public abstract TBuilder Clone();
-
-        public abstract TMessage Build();
-
-        public abstract TMessage BuildPartial();
-
-        public abstract TBuilder MergeFrom(IMessageLite other);
-
-        public abstract TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry);
-
-        public abstract TMessage DefaultInstanceForType { get; }
-
-        #region IBuilderLite<TMessage,TBuilder> Members
-
-        public virtual TBuilder MergeFrom(ICodedInputStream input)
-        {
-            return MergeFrom(input, ExtensionRegistry.CreateInstance());
-        }
-
-        public TBuilder MergeDelimitedFrom(Stream input)
-        {
-            return MergeDelimitedFrom(input, ExtensionRegistry.CreateInstance());
-        }
-
-        public TBuilder MergeDelimitedFrom(Stream input, ExtensionRegistry extensionRegistry)
-        {
-            int size = (int) CodedInputStream.ReadRawVarint32(input);
-            Stream limitedStream = new LimitedInputStream(input, size);
-            return MergeFrom(limitedStream, extensionRegistry);
-        }
-
-        public TBuilder MergeFrom(ByteString data)
-        {
-            return MergeFrom(data, ExtensionRegistry.CreateInstance());
-        }
-
-        public TBuilder MergeFrom(ByteString data, ExtensionRegistry extensionRegistry)
-        {
-            CodedInputStream input = data.CreateCodedInput();
-            MergeFrom(input, extensionRegistry);
-            input.CheckLastTagWas(0);
-            return ThisBuilder;
-        }
-
-        public TBuilder MergeFrom(byte[] data)
-        {
-            CodedInputStream input = CodedInputStream.CreateInstance(data);
-            MergeFrom(input);
-            input.CheckLastTagWas(0);
-            return ThisBuilder;
-        }
-
-        public TBuilder MergeFrom(byte[] data, ExtensionRegistry extensionRegistry)
-        {
-            CodedInputStream input = CodedInputStream.CreateInstance(data);
-            MergeFrom(input, extensionRegistry);
-            input.CheckLastTagWas(0);
-            return ThisBuilder;
-        }
-
-        public TBuilder MergeFrom(Stream input)
-        {
-            CodedInputStream codedInput = CodedInputStream.CreateInstance(input);
-            MergeFrom(codedInput);
-            codedInput.CheckLastTagWas(0);
-            return ThisBuilder;
-        }
-
-        public TBuilder MergeFrom(Stream input, ExtensionRegistry extensionRegistry)
-        {
-            CodedInputStream codedInput = CodedInputStream.CreateInstance(input);
-            MergeFrom(codedInput, extensionRegistry);
-            codedInput.CheckLastTagWas(0);
-            return ThisBuilder;
-        }
-
-        #endregion
-
-        #region Explicit definitions
-
-        IBuilderLite IBuilderLite.WeakClear()
-        {
-            return Clear();
-        }
-
-        IBuilderLite IBuilderLite.WeakMergeFrom(IMessageLite message)
-        {
-            return MergeFrom(message);
-        }
-
-        IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data)
-        {
-            return MergeFrom(data);
-        }
-
-        IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data, ExtensionRegistry registry)
-        {
-            return MergeFrom(data, registry);
-        }
-
-        IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input)
-        {
-            return MergeFrom(input);
-        }
-
-        IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry)
-        {
-            return MergeFrom(input, registry);
-        }
-
-        IMessageLite IBuilderLite.WeakBuild()
-        {
-            return Build();
-        }
-
-        IMessageLite IBuilderLite.WeakBuildPartial()
-        {
-            return BuildPartial();
-        }
-
-        IBuilderLite IBuilderLite.WeakClone()
-        {
-            return Clone();
-        }
-
-        IMessageLite IBuilderLite.WeakDefaultInstanceForType
-        {
-            get { return DefaultInstanceForType; }
-        }
-
-        #endregion
-
-        #region LimitedInputStream
-
-        /// <summary>
-        /// Stream implementation which proxies another stream, only allowing a certain amount
-        /// of data to be read. Note that this is only used to read delimited streams, so it
-        /// doesn't attempt to implement everything.
-        /// </summary>
-        private class LimitedInputStream : Stream
-        {
-            private readonly Stream proxied;
-            private int bytesLeft;
-
-            internal LimitedInputStream(Stream proxied, int size)
-            {
-                this.proxied = proxied;
-                bytesLeft = size;
-            }
-
-            public override bool CanRead
-            {
-                get { return true; }
-            }
-
-            public override bool CanSeek
-            {
-                get { return false; }
-            }
-
-            public override bool CanWrite
-            {
-                get { return false; }
-            }
-
-            public override void Flush()
-            {
-            }
-
-            public override long Length
-            {
-                get { throw new NotSupportedException(); }
-            }
-
-            public override long Position
-            {
-                get { throw new NotSupportedException(); }
-                set { throw new NotSupportedException(); }
-            }
-
-            public override int Read(byte[] buffer, int offset, int count)
-            {
-                if (bytesLeft > 0)
-                {
-                    int bytesRead = proxied.Read(buffer, offset, Math.Min(bytesLeft, count));
-                    bytesLeft -= bytesRead;
-                    return bytesRead;
-                }
-                return 0;
-            }
-
-            public override long Seek(long offset, SeekOrigin origin)
-            {
-                throw new NotSupportedException();
-            }
-
-            public override void SetLength(long value)
-            {
-                throw new NotSupportedException();
-            }
-
-            public override void Write(byte[] buffer, int offset, int count)
-            {
-                throw new NotSupportedException();
-            }
-        }
-
-        #endregion
-    }
-}

+ 0 - 293
csharp/src/ProtocolBuffers/AbstractMessage.cs

@@ -1,293 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using Google.ProtocolBuffers.Collections;
-using Google.ProtocolBuffers.Descriptors;
-
-namespace Google.ProtocolBuffers
-{
-    /// <summary>
-    /// Implementation of the non-generic IMessage interface as far as possible.
-    /// </summary>
-    public abstract partial class AbstractMessage<TMessage, TBuilder> : AbstractMessageLite<TMessage, TBuilder>,
-                                                                IMessage<TMessage, TBuilder>
-        where TMessage : AbstractMessage<TMessage, TBuilder>
-        where TBuilder : AbstractBuilder<TMessage, TBuilder>
-    {
-        /// <summary>
-        /// The serialized size if it's already been computed, or null
-        /// if we haven't computed it yet.
-        /// </summary>
-        private int? memoizedSize = null;
-
-        #region Unimplemented members of IMessage
-
-        public abstract MessageDescriptor DescriptorForType { get; }
-        public abstract IDictionary<FieldDescriptor, object> AllFields { get; }
-        public abstract bool HasField(FieldDescriptor field);
-        public abstract bool HasOneof(OneofDescriptor oneof);
-        public abstract FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof);
-        public abstract object this[FieldDescriptor field] { get; }
-        public abstract int GetRepeatedFieldCount(FieldDescriptor field);
-        public abstract object this[FieldDescriptor field, int index] { get; }
-        public abstract UnknownFieldSet UnknownFields { get; }
-
-        #endregion
-
-        /// <summary>
-        /// Returns true iff all required fields in the message and all embedded
-        /// messages are set.
-        /// </summary>
-        public override bool IsInitialized
-        {
-            get
-            {
-                // Check that all required fields are present.
-                foreach (FieldDescriptor field in DescriptorForType.Fields)
-                {
-                    if (field.IsRequired && !HasField(field))
-                    {
-                        return false;
-                    }
-                }
-
-                // Check that embedded messages are initialized.
-                foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields)
-                {
-                    FieldDescriptor field = entry.Key;
-                    if (field.MappedType == MappedType.Message)
-                    {
-                        if (field.IsRepeated)
-                        {
-                            // We know it's an IList<T>, but not the exact type - so
-                            // IEnumerable is the best we can do. (C# generics aren't covariant yet.)
-                            foreach (IMessageLite element in (IEnumerable) entry.Value)
-                            {
-                                if (!element.IsInitialized)
-                                {
-                                    return false;
-                                }
-                            }
-                        }
-                        else
-                        {
-                            if (!((IMessageLite) entry.Value).IsInitialized)
-                            {
-                                return false;
-                            }
-                        }
-                    }
-                }
-                return true;
-            }
-        }
-
-        public override sealed string ToString()
-        {
-            return TextFormat.PrintToString(this);
-        }
-
-        public override sealed void PrintTo(TextWriter writer)
-        {
-            TextFormat.Print(this, writer);
-        }
-
-        /// <summary>
-        /// Serializes the message and writes it to the given output stream.
-        /// This does not flush or close the stream.
-        /// </summary>
-        /// <remarks>
-        /// Protocol Buffers are not self-delimiting. Therefore, if you write
-        /// any more data to the stream after the message, you must somehow ensure
-        /// that the parser on the receiving end does not interpret this as being
-        /// part of the protocol message. One way of doing this is by writing the size
-        /// of the message before the data, then making sure you limit the input to
-        /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).
-        /// </remarks>
-        public override void WriteTo(ICodedOutputStream output)
-        {
-            foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields)
-            {
-                FieldDescriptor field = entry.Key;
-                if (field.IsRepeated)
-                {
-                    // We know it's an IList<T>, but not the exact type - so
-                    // IEnumerable is the best we can do. (C# generics aren't covariant yet.)
-                    IEnumerable valueList = (IEnumerable) entry.Value;
-                    if (field.IsPacked)
-                    {
-                        output.WritePackedArray(field.FieldType, field.FieldNumber, field.Name, valueList);
-                    }
-                    else
-                    {
-                        output.WriteArray(field.FieldType, field.FieldNumber, field.Name, valueList);
-                    }
-                }
-                else
-                {
-                    output.WriteField(field.FieldType, field.FieldNumber, field.Name, entry.Value);
-                }
-            }
-
-            UnknownFieldSet unknownFields = UnknownFields;
-            if (DescriptorForType.Options.MessageSetWireFormat)
-            {
-                unknownFields.WriteAsMessageSetTo(output);
-            }
-            else
-            {
-                unknownFields.WriteTo(output);
-            }
-        }
-
-        /// <summary>
-        /// Returns the number of bytes required to encode this message.
-        /// The result is only computed on the first call and memoized after that.
-        /// </summary>
-        public override int SerializedSize
-        {
-            get
-            {
-                if (memoizedSize != null)
-                {
-                    return memoizedSize.Value;
-                }
-
-                int size = 0;
-                foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields)
-                {
-                    FieldDescriptor field = entry.Key;
-                    if (field.IsRepeated)
-                    {
-                        IEnumerable valueList = (IEnumerable) entry.Value;
-                        if (field.IsPacked)
-                        {
-                            int dataSize = 0;
-                            foreach (object element in valueList)
-                            {
-                                dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element);
-                            }
-                            size += dataSize;
-                            size += CodedOutputStream.ComputeTagSize(field.FieldNumber);
-                            size += CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);
-                        }
-                        else
-                        {
-                            foreach (object element in valueList)
-                            {
-                                size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, element);
-                            }
-                        }
-                    }
-                    else
-                    {
-                        size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, entry.Value);
-                    }
-                }
-
-                UnknownFieldSet unknownFields = UnknownFields;
-                if (DescriptorForType.Options.MessageSetWireFormat)
-                {
-                    size += unknownFields.SerializedSizeAsMessageSet;
-                }
-                else
-                {
-                    size += unknownFields.SerializedSize;
-                }
-
-                memoizedSize = size;
-                return size;
-            }
-        }
-
-        /// <summary>
-        /// Compares the specified object with this message for equality.
-        /// Returns true iff the given object is a message of the same type
-        /// (as defined by DescriptorForType) and has identical values
-        /// for all its fields.
-        /// </summary>
-        public override bool Equals(object other)
-        {
-            if (other == this)
-            {
-                return true;
-            }
-            IMessage otherMessage = other as IMessage;
-            if (otherMessage == null || otherMessage.DescriptorForType != DescriptorForType)
-            {
-                return false;
-            }
-            return Dictionaries.Equals(AllFields, otherMessage.AllFields) &&
-                   UnknownFields.Equals(otherMessage.UnknownFields);
-        }
-
-        /// <summary>
-        /// Returns the hash code value for this message.
-        /// TODO(jonskeet): Specify the hash algorithm, but better than the Java one!
-        /// </summary>
-        public override int GetHashCode()
-        {
-            int hash = 41;
-            hash = (19*hash) + DescriptorForType.GetHashCode();
-            hash = (53*hash) + Dictionaries.GetHashCode(AllFields);
-            hash = (29*hash) + UnknownFields.GetHashCode();
-            return hash;
-        }
-
-        #region Explicit Members
-
-        IBuilder IMessage.WeakCreateBuilderForType()
-        {
-            return CreateBuilderForType();
-        }
-
-        IBuilder IMessage.WeakToBuilder()
-        {
-            return ToBuilder();
-        }
-
-        IMessage IMessage.WeakDefaultInstanceForType
-        {
-            get { return DefaultInstanceForType; }
-        }
-
-        #endregion
-    }
-}

+ 0 - 140
csharp/src/ProtocolBuffers/AbstractMessageLite.cs

@@ -1,140 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System.IO;
-
-namespace Google.ProtocolBuffers
-{
-    /// <summary>
-    /// Implementation of the non-generic IMessage interface as far as possible.
-    /// </summary>
-    public abstract partial class AbstractMessageLite<TMessage, TBuilder> : IMessageLite<TMessage, TBuilder>
-        where TMessage : AbstractMessageLite<TMessage, TBuilder>
-        where TBuilder : AbstractBuilderLite<TMessage, TBuilder>
-    {
-        public abstract TBuilder CreateBuilderForType();
-
-        public abstract TBuilder ToBuilder();
-
-        public abstract TMessage DefaultInstanceForType { get; }
-
-        public abstract bool IsInitialized { get; }
-
-        public abstract void WriteTo(ICodedOutputStream output);
-
-        public abstract int SerializedSize { get; }
-
-        //public override bool Equals(object other) {
-        //}
-
-        //public override int GetHashCode() {
-        //}
-
-        public abstract void PrintTo(TextWriter writer);
-
-        #region IMessageLite<TMessage,TBuilder> Members
-
-        /// <summary>
-        /// Serializes the message to a ByteString. This is a trivial wrapper
-        /// around WriteTo(ICodedOutputStream).
-        /// </summary>
-        public ByteString ToByteString()
-        {
-            ByteString.CodedBuilder output = new ByteString.CodedBuilder(SerializedSize);
-            WriteTo(output.CodedOutput);
-            return output.Build();
-        }
-
-        /// <summary>
-        /// Serializes the message to a byte array. This is a trivial wrapper
-        /// around WriteTo(ICodedOutputStream).
-        /// </summary>
-        public byte[] ToByteArray()
-        {
-            byte[] result = new byte[SerializedSize];
-            CodedOutputStream output = CodedOutputStream.CreateInstance(result);
-            WriteTo(output);
-            output.CheckNoSpaceLeft();
-            return result;
-        }
-
-        /// <summary>
-        /// Serializes the message and writes it to the given stream.
-        /// This is just a wrapper around WriteTo(CodedOutputStream). This
-        /// does not flush or close the stream.
-        /// </summary>
-        /// <param name="output"></param>
-        public void WriteTo(Stream output)
-        {
-            CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output);
-            WriteTo(codedOutput);
-            codedOutput.Flush();
-        }
-
-        /// <summary>
-        /// Like WriteTo(Stream) but writes the size of the message as a varint before
-        /// writing the data. This allows more data to be written to the stream after the
-        /// message without the need to delimit the message data yourself. Use 
-        /// IBuilder.MergeDelimitedFrom(Stream) or the static method
-        /// YourMessageType.ParseDelimitedFrom(Stream) to parse messages written by this method.
-        /// </summary>
-        /// <param name="output"></param>
-        public void WriteDelimitedTo(Stream output)
-        {
-            CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output);
-            codedOutput.WriteRawVarint32((uint) SerializedSize);
-            WriteTo(codedOutput);
-            codedOutput.Flush();
-        }
-
-        IBuilderLite IMessageLite.WeakCreateBuilderForType()
-        {
-            return CreateBuilderForType();
-        }
-
-        IBuilderLite IMessageLite.WeakToBuilder()
-        {
-            return ToBuilder();
-        }
-
-        IMessageLite IMessageLite.WeakDefaultInstanceForType
-        {
-            get { return DefaultInstanceForType; }
-        }
-
-        #endregion
-    }
-}

+ 1 - 1
csharp/src/ProtocolBuffers/ByteArray.cs

@@ -36,7 +36,7 @@
 
 using System;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     /// <summary>
     /// Provides a utility routine to copy small arrays much more quickly than Buffer.BlockCopy

+ 19 - 1
csharp/src/ProtocolBuffers/ByteString.cs

@@ -40,7 +40,7 @@ using System.Collections.Generic;
 using System.IO;
 using System.Text;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     /// <summary>
     /// Immutable array of bytes.
@@ -208,6 +208,24 @@ namespace Google.ProtocolBuffers
             return CodedInputStream.CreateInstance(bytes);
         }
 
+        public static bool operator ==(ByteString lhs, ByteString rhs)
+        {
+            if (ReferenceEquals(lhs, rhs))
+            {
+                return true;
+            }
+            if (ReferenceEquals(lhs, null))
+            {
+                return false;
+            }
+            return lhs.Equals(rhs);
+        }
+
+        public static bool operator !=(ByteString lhs, ByteString rhs)
+        {
+            return !(lhs == rhs);
+        }
+
         // TODO(jonskeet): CopyTo if it turns out to be required
 
         public override bool Equals(object obj)

+ 25 - 138
csharp/src/ProtocolBuffers/CodedInputStream.cs

@@ -38,9 +38,9 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Text;
-using Google.ProtocolBuffers.Descriptors;
+using Google.Protobuf.Descriptors;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     /// <summary>
     /// Readings and decodes protocol message fields.
@@ -367,32 +367,14 @@ namespace Google.ProtocolBuffers
         /// <summary>
         /// Reads a group field value from the stream.
         /// </summary>    
-        public void ReadGroup(int fieldNumber, IBuilderLite builder,
-                              ExtensionRegistry extensionRegistry)
+        public void ReadGroup(int fieldNumber, IMessage message)
         {
             if (recursionDepth >= recursionLimit)
             {
                 throw InvalidProtocolBufferException.RecursionLimitExceeded();
             }
             ++recursionDepth;
-            builder.WeakMergeFrom(this, extensionRegistry);
-            CheckLastTagWas(WireFormat.MakeTag(fieldNumber, WireFormat.WireType.EndGroup));
-            --recursionDepth;
-        }
-
-        /// <summary>
-        /// Reads a group field value from the stream and merges it into the given
-        /// UnknownFieldSet.
-        /// </summary>   
-        [Obsolete]
-        public void ReadUnknownGroup(int fieldNumber, IBuilderLite builder)
-        {
-            if (recursionDepth >= recursionLimit)
-            {
-                throw InvalidProtocolBufferException.RecursionLimitExceeded();
-            }
-            ++recursionDepth;
-            builder.WeakMergeFrom(this);
+            message.MergeFrom(this);
             CheckLastTagWas(WireFormat.MakeTag(fieldNumber, WireFormat.WireType.EndGroup));
             --recursionDepth;
         }
@@ -400,7 +382,7 @@ namespace Google.ProtocolBuffers
         /// <summary>
         /// Reads an embedded message field value from the stream.
         /// </summary>   
-        public void ReadMessage(IBuilderLite builder, ExtensionRegistry extensionRegistry)
+        public void ReadMessage(IMessage builder)
         {
             int length = (int) ReadRawVarint32();
             if (recursionDepth >= recursionLimit)
@@ -409,7 +391,7 @@ namespace Google.ProtocolBuffers
             }
             int oldLimit = PushLimit(length);
             ++recursionDepth;
-            builder.WeakMergeFrom(this, extensionRegistry);
+            builder.MergeFrom(this);
             CheckLastTagWas(0);
             --recursionDepth;
             PopLimit(oldLimit);
@@ -447,40 +429,17 @@ namespace Google.ProtocolBuffers
             return true;
         }
 
-        /// <summary>
-        /// Reads an enum field value from the stream. The caller is responsible
-        /// for converting the numeric value to an actual enum.
-        /// </summary>   
-        public bool ReadEnum(ref IEnumLite value, out object unknown, IEnumLiteMap mapping)
-        {
-            int rawValue = (int) ReadRawVarint32();
-
-            value = mapping.FindValueByNumber(rawValue);
-            if (value != null)
-            {
-                unknown = null;
-                return true;
-            }
-            unknown = rawValue;
-            return false;
-        }
-
         /// <summary>
         /// Reads an enum field value from the stream. If the enum is valid for type T,
         /// then the ref value is set and it returns true.  Otherwise the unknown output
         /// value is set and this method returns false.
         /// </summary>   
-        public bool ReadEnum<T>(ref T value, out object unknown)
+        public bool ReadEnum<T>(ref T value)
             where T : struct, IComparable, IFormattable
         {
             int number = (int) ReadRawVarint32();
-            if (EnumParser<T>.TryConvert(number, ref value))
-            {
-                unknown = null;
-                return true;
-            }
-            unknown = number;
-            return false;
+            value = EnumHelper<T>.FromInt32(number);
+            return true;
         }
 
         /// <summary>
@@ -655,6 +614,7 @@ namespace Google.ProtocolBuffers
 
         public void ReadInt32Array(uint fieldTag, string fieldName, ICollection<int> list)
         {
+            // TODO(jonskeet): Work out how this works for non-packed values. (It doesn't look like it does...)
             bool isPacked;
             int holdLimit;
             if (BeginArray(fieldTag, out isPacked, out holdLimit))
@@ -833,62 +793,9 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void ReadEnumArray(uint fieldTag, string fieldName, ICollection<IEnumLite> list,
-                                  out ICollection<object> unknown, IEnumLiteMap mapping)
-        {
-            unknown = null;
-            object unkval;
-            IEnumLite value = null;
-            WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag);
-
-            // 2.3 allows packed form even if the field is not declared packed.
-            if (wformat == WireFormat.WireType.LengthDelimited)
-            {
-                int length = (int) (ReadRawVarint32() & int.MaxValue);
-                int limit = PushLimit(length);
-                while (!ReachedLimit)
-                {
-                    if (ReadEnum(ref value, out unkval, mapping))
-                    {
-                        list.Add(value);
-                    }
-                    else
-                    {
-                        if (unknown == null)
-                        {
-                            unknown = new List<object>();
-                        }
-                        unknown.Add(unkval);
-                    }
-                }
-                PopLimit(limit);
-            }
-            else
-            {
-                do
-                {
-                    if (ReadEnum(ref value, out unkval, mapping))
-                    {
-                        list.Add(value);
-                    }
-                    else
-                    {
-                        if (unknown == null)
-                        {
-                            unknown = new List<object>();
-                        }
-                        unknown.Add(unkval);
-                    }
-                } while (ContinueArray(fieldTag));
-            }
-        }
-
-        public void ReadEnumArray<T>(uint fieldTag, string fieldName, ICollection<T> list,
-                                     out ICollection<object> unknown)
+        public void ReadEnumArray<T>(uint fieldTag, string fieldName, ICollection<T> list)
             where T : struct, IComparable, IFormattable
         {
-            unknown = null;
-            object unkval;
             T value = default(T);
             WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag);
 
@@ -899,18 +806,8 @@ namespace Google.ProtocolBuffers
                 int limit = PushLimit(length);
                 while (!ReachedLimit)
                 {
-                    if (ReadEnum<T>(ref value, out unkval))
-                    {
-                        list.Add(value);
-                    }
-                    else
-                    {
-                        if (unknown == null)
-                        {
-                            unknown = new List<object>();
-                        }
-                        unknown.Add(unkval);
-                    }
+                    ReadEnum<T>(ref value);
+                    list.Add(value);
                 }
                 PopLimit(limit);
             }
@@ -918,41 +815,31 @@ namespace Google.ProtocolBuffers
             {
                 do
                 {
-                    if (ReadEnum(ref value, out unkval))
-                    {
-                        list.Add(value);
-                    }
-                    else
-                    {
-                        if (unknown == null)
-                        {
-                            unknown = new List<object>();
-                        }
-                        unknown.Add(unkval);
-                    }
+                    ReadEnum(ref value);
+                    list.Add(value);
                 } while (ContinueArray(fieldTag));
             }
         }
 
-        public void ReadMessageArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,
-                                        ExtensionRegistry registry) where T : IMessageLite
+        public void ReadMessageArray<T>(uint fieldTag, string fieldName, ICollection<T> list, MessageParser<T> messageParser)
+            where T : IMessage<T>
         {
             do
             {
-                IBuilderLite builder = messageType.WeakCreateBuilderForType();
-                ReadMessage(builder, registry);
-                list.Add((T) builder.WeakBuildPartial());
+                T message = messageParser.CreateTemplate();
+                ReadMessage(message);
+                list.Add(message);
             } while (ContinueArray(fieldTag));
         }
 
-        public void ReadGroupArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,
-                                      ExtensionRegistry registry) where T : IMessageLite
+        public void ReadGroupArray<T>(uint fieldTag, string fieldName, ICollection<T> list, MessageParser<T> messageParser)
+            where T : IMessage<T>
         {
             do
             {
-                IBuilderLite builder = messageType.WeakCreateBuilderForType();
-                ReadGroup(WireFormat.GetTagFieldNumber(fieldTag), builder, registry);
-                list.Add((T) builder.WeakBuildPartial());
+                T message = messageParser.CreateTemplate();
+                ReadGroup(WireFormat.GetTagFieldNumber(fieldTag), message);
+                list.Add(message);
             } while (ContinueArray(fieldTag));
         }
 

+ 25 - 46
csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs

@@ -37,9 +37,9 @@
 using System;
 using System.Globalization;
 using System.Text;
-using Google.ProtocolBuffers.Descriptors;
+using Google.Protobuf.Descriptors;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     // This part of CodedOutputStream provides all the static entry points that are used
     // by generated code and internally to compute the size of messages prior to being
@@ -145,9 +145,9 @@ namespace Google.ProtocolBuffers
         /// Compute the number of bytes that would be needed to encode a
         /// group field, including the tag.
         /// </summary>
-        public static int ComputeGroupSize(int fieldNumber, IMessageLite value)
+        public static int ComputeGroupSize(int fieldNumber, IMessage value)
         {
-            return ComputeTagSize(fieldNumber)*2 + value.SerializedSize;
+            return ComputeTagSize(fieldNumber)*2 + value.CalculateSize();
         }
 
         /// <summary>
@@ -156,18 +156,18 @@ namespace Google.ProtocolBuffers
         /// </summary>
         [Obsolete]
         public static int ComputeUnknownGroupSize(int fieldNumber,
-                                                  IMessageLite value)
+                                                  IMessage value)
         {
-            return ComputeTagSize(fieldNumber)*2 + value.SerializedSize;
+            return ComputeTagSize(fieldNumber)*2 + value.CalculateSize();
         }
 
         /// <summary>
         /// Compute the number of bytes that would be needed to encode an
         /// embedded message field, including the tag.
         /// </summary>
-        public static int ComputeMessageSize(int fieldNumber, IMessageLite value)
+        public static int ComputeMessageSize(int fieldNumber, IMessage value)
         {
-            int size = value.SerializedSize;
+            int size = value.CalculateSize();
             return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size((uint) size) + size;
         }
 
@@ -196,7 +196,7 @@ namespace Google.ProtocolBuffers
         /// enum field, including the tag. The caller is responsible for
         /// converting the enum value to its numeric value.
         /// </summary>
-        public static int ComputeEnumSize(int fieldNumber, int value)
+        public static int ComputeEnumSize<T>(int fieldNumber, T value) where T : struct, IComparable, IFormattable
         {
             return ComputeTagSize(fieldNumber) + ComputeEnumSizeNoTag(value);
         }
@@ -332,28 +332,18 @@ namespace Google.ProtocolBuffers
         /// Compute the number of bytes that would be needed to encode a
         /// group field, including the tag.
         /// </summary>
-        public static int ComputeGroupSizeNoTag(IMessageLite value)
+        public static int ComputeGroupSizeNoTag(IMessage value)
         {
-            return value.SerializedSize;
-        }
-
-        /// <summary>
-        /// Compute the number of bytes that would be needed to encode a
-        /// group field represented by an UnknownFieldSet, including the tag.
-        /// </summary>
-        [Obsolete]
-        public static int ComputeUnknownGroupSizeNoTag(IMessageLite value)
-        {
-            return value.SerializedSize;
+            return value.CalculateSize();
         }
 
         /// <summary>
         /// Compute the number of bytes that would be needed to encode an
         /// embedded message field, including the tag.
         /// </summary>
-        public static int ComputeMessageSizeNoTag(IMessageLite value)
+        public static int ComputeMessageSizeNoTag(IMessage value)
         {
-            int size = value.SerializedSize;
+            int size = value.CalculateSize();
             return ComputeRawVarint32Size((uint) size) + size;
         }
 
@@ -381,9 +371,10 @@ namespace Google.ProtocolBuffers
         /// enum field, including the tag. The caller is responsible for
         /// converting the enum value to its numeric value.
         /// </summary>
-        public static int ComputeEnumSizeNoTag(int value)
+        public static int ComputeEnumSizeNoTag<T>(T value) where T : struct, IComparable, IFormattable
         {
-            return ComputeInt32SizeNoTag(value);
+            int serializedValue = EnumHelper<T>.ToInt32(value);
+            return ComputeInt32SizeNoTag(serializedValue);
         }
 
         /// <summary>
@@ -433,7 +424,7 @@ namespace Google.ProtocolBuffers
         /// MessageSet extension to the stream. For historical reasons,
         /// the wire format differs from normal fields.
         /// </summary>
-        public static int ComputeMessageSetExtensionSize(int fieldNumber, IMessageLite value)
+        public static int ComputeMessageSetExtensionSize(int fieldNumber, IMessage value)
         {
             return ComputeTagSize(WireFormat.MessageSetField.Item)*2 +
                    ComputeUInt32Size(WireFormat.MessageSetField.TypeID, (uint) fieldNumber) +
@@ -524,6 +515,7 @@ namespace Google.ProtocolBuffers
         /// Compute the number of bytes that would be needed to encode a
         /// field of arbitrary type, including the tag, to the stream.
         /// </summary>
+        // TODO(jonskeet): Why do we need this?
         public static int ComputeFieldSize(FieldType fieldType, int fieldNumber, Object value)
         {
             switch (fieldType)
@@ -547,9 +539,9 @@ namespace Google.ProtocolBuffers
                 case FieldType.String:
                     return ComputeStringSize(fieldNumber, (string) value);
                 case FieldType.Group:
-                    return ComputeGroupSize(fieldNumber, (IMessageLite) value);
+                    return ComputeGroupSize(fieldNumber, (IMessage) value);
                 case FieldType.Message:
-                    return ComputeMessageSize(fieldNumber, (IMessageLite) value);
+                    return ComputeMessageSize(fieldNumber, (IMessage) value);
                 case FieldType.Bytes:
                     return ComputeBytesSize(fieldNumber, (ByteString) value);
                 case FieldType.UInt32:
@@ -563,14 +555,7 @@ namespace Google.ProtocolBuffers
                 case FieldType.SInt64:
                     return ComputeSInt64Size(fieldNumber, (long) value);
                 case FieldType.Enum:
-                    if (value is Enum)
-                    {
-                        return ComputeEnumSize(fieldNumber, Convert.ToInt32(value));
-                    }
-                    else
-                    {
-                        return ComputeEnumSize(fieldNumber, ((IEnumLite) value).Number);
-                    }
+                    return ComputeEnumSize(fieldNumber, Convert.ToInt64(value));
                 default:
                     throw new ArgumentOutOfRangeException("Invalid field type " + fieldType);
             }
@@ -580,6 +565,7 @@ namespace Google.ProtocolBuffers
         /// Compute the number of bytes that would be needed to encode a
         /// field of arbitrary type, excluding the tag, to the stream.
         /// </summary>
+        // TODO(jonskeet): Why do we need this?
         public static int ComputeFieldSizeNoTag(FieldType fieldType, Object value)
         {
             switch (fieldType)
@@ -603,9 +589,9 @@ namespace Google.ProtocolBuffers
                 case FieldType.String:
                     return ComputeStringSizeNoTag((string) value);
                 case FieldType.Group:
-                    return ComputeGroupSizeNoTag((IMessageLite) value);
+                    return ComputeGroupSizeNoTag((IMessage) value);
                 case FieldType.Message:
-                    return ComputeMessageSizeNoTag((IMessageLite) value);
+                    return ComputeMessageSizeNoTag((IMessage) value);
                 case FieldType.Bytes:
                     return ComputeBytesSizeNoTag((ByteString) value);
                 case FieldType.UInt32:
@@ -619,14 +605,7 @@ namespace Google.ProtocolBuffers
                 case FieldType.SInt64:
                     return ComputeSInt64SizeNoTag((long) value);
                 case FieldType.Enum:
-                    if (value is Enum)
-                    {
-                        return ComputeEnumSizeNoTag(Convert.ToInt32(value));
-                    }
-                    else
-                    {
-                        return ComputeEnumSizeNoTag(((IEnumLite) value).Number);
-                    }
+                    return ComputeEnumSizeNoTag(Convert.ToInt64(value));
                 default:
                     throw new ArgumentOutOfRangeException("Invalid field type " + fieldType);
             }

+ 144 - 194
csharp/src/ProtocolBuffers/CodedOutputStream.cs

@@ -36,13 +36,12 @@
 
 using System;
 using System.Collections;
-using System.Collections.Generic;
 using System.IO;
 using System.Text;
-using Google.ProtocolBuffers.Collections;
-using Google.ProtocolBuffers.Descriptors;
+using Google.Protobuf.Collections;
+using Google.Protobuf.Descriptors;
 
-namespace Google.ProtocolBuffers
+namespace Google.Protobuf
 {
     /// <summary>
     /// Encodes and writes protocol message fields.
@@ -144,45 +143,9 @@ namespace Google.ProtocolBuffers
         void ICodedOutputStream.WriteMessageStart() { }
         void ICodedOutputStream.WriteMessageEnd() { Flush(); }
 
-        #region Writing of unknown fields
-
-        [Obsolete]
-        public void WriteUnknownGroup(int fieldNumber, IMessageLite value)
-        {
-            WriteTag(fieldNumber, WireFormat.WireType.StartGroup);
-            value.WriteTo(this);
-            WriteTag(fieldNumber, WireFormat.WireType.EndGroup);
-        }
-
-        public void WriteUnknownBytes(int fieldNumber, ByteString value)
-        {
-            WriteBytes(fieldNumber, null /*not used*/, value);
-        }
-
-        public void WriteUnknownField(int fieldNumber, WireFormat.WireType wireType, ulong value)
-        {
-            if (wireType == WireFormat.WireType.Varint)
-            {
-                WriteUInt64(fieldNumber, null /*not used*/, value);
-            }
-            else if (wireType == WireFormat.WireType.Fixed32)
-            {
-                WriteFixed32(fieldNumber, null /*not used*/, (uint) value);
-            }
-            else if (wireType == WireFormat.WireType.Fixed64)
-            {
-                WriteFixed64(fieldNumber, null /*not used*/, value);
-            }
-            else
-            {
-                throw InvalidProtocolBufferException.InvalidWireType();
-            }
-        }
-
-        #endregion
-
         #region Writing of tags and fields
 
+        // TODO(jonskeet): Do we need this?
         public void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value)
         {
             switch (fieldType)
@@ -191,10 +154,10 @@ namespace Google.ProtocolBuffers
                     WriteString(fieldNumber, fieldName, (string) value);
                     break;
                 case FieldType.Message:
-                    WriteMessage(fieldNumber, fieldName, (IMessageLite) value);
+                    WriteMessage(fieldNumber, fieldName, (IMessage) value);
                     break;
                 case FieldType.Group:
-                    WriteGroup(fieldNumber, fieldName, (IMessageLite) value);
+                    WriteGroup(fieldNumber, fieldName, (IMessage) value);
                     break;
                 case FieldType.Bytes:
                     WriteBytes(fieldNumber, fieldName, (ByteString) value);
@@ -203,15 +166,7 @@ namespace Google.ProtocolBuffers
                     WriteBool(fieldNumber, fieldName, (bool) value);
                     break;
                 case FieldType.Enum:
-                    if (value is Enum)
-                    {
-                        WriteEnum(fieldNumber, fieldName, (int) value, null /*not used*/);
-                    }
-                    else
-                    {
-                        WriteEnum(fieldNumber, fieldName, ((IEnumLite) value).Number, null /*not used*/);
-                    }
-                    break;
+                    throw new NotImplementedException();
                 case FieldType.Int32:
                     WriteInt32(fieldNumber, fieldName, (int) value);
                     break;
@@ -356,17 +311,17 @@ namespace Google.ProtocolBuffers
         /// <summary>
         /// Writes a group field value, including tag, to the stream.
         /// </summary>
-        public void WriteGroup(int fieldNumber, string fieldName, IMessageLite value)
+        public void WriteGroup(int fieldNumber, string fieldName, IMessage value)
         {
             WriteTag(fieldNumber, WireFormat.WireType.StartGroup);
             value.WriteTo(this);
             WriteTag(fieldNumber, WireFormat.WireType.EndGroup);
         }
 
-        public void WriteMessage(int fieldNumber, string fieldName, IMessageLite value)
+        public void WriteMessage(int fieldNumber, string fieldName, IMessage value)
         {
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) value.SerializedSize);
+            WriteRawVarint32((uint) value.CalculateSize());
             value.WriteTo(this);
         }
 
@@ -383,10 +338,10 @@ namespace Google.ProtocolBuffers
             WriteRawVarint32(value);
         }
 
-        public void WriteEnum(int fieldNumber, string fieldName, int value, object rawValue)
+        public void WriteEnum<T>(int fieldNumber, string fieldName, T value) where T : struct, IComparable, IFormattable
         {
             WriteTag(fieldNumber, WireFormat.WireType.Varint);
-            WriteInt32NoTag(value);
+            WriteInt32NoTag(EnumHelper<T>.ToInt32(value));
         }
 
         public void WriteSFixed32(int fieldNumber, string fieldName, int value)
@@ -413,7 +368,7 @@ namespace Google.ProtocolBuffers
             WriteRawVarint64(EncodeZigZag64(value));
         }
 
-        public void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value)
+        public void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessage value)
         {
             WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.StartGroup);
             WriteUInt32(WireFormat.MessageSetField.TypeID, "type_id", (uint) fieldNumber);
@@ -432,7 +387,7 @@ namespace Google.ProtocolBuffers
         #endregion
 
         #region Writing of values without tags
-
+        // TODO(jonskeet): Remove this?
         public void WriteFieldNoTag(FieldType fieldType, object value)
         {
             switch (fieldType)
@@ -441,10 +396,10 @@ namespace Google.ProtocolBuffers
                     WriteStringNoTag((string) value);
                     break;
                 case FieldType.Message:
-                    WriteMessageNoTag((IMessageLite) value);
+                    WriteMessageNoTag((IMessage) value);
                     break;
                 case FieldType.Group:
-                    WriteGroupNoTag((IMessageLite) value);
+                    WriteGroupNoTag((IMessage) value);
                     break;
                 case FieldType.Bytes:
                     WriteBytesNoTag((ByteString) value);
@@ -453,14 +408,7 @@ namespace Google.ProtocolBuffers
                     WriteBoolNoTag((bool) value);
                     break;
                 case FieldType.Enum:
-                    if (value is Enum)
-                    {
-                        WriteEnumNoTag((int) value);
-                    }
-                    else
-                    {
-                        WriteEnumNoTag(((IEnumLite) value).Number);
-                    }
+                    WriteEnumNoTag((int) value);
                     break;
                 case FieldType.Int32:
                     WriteInt32NoTag((int) value);
@@ -613,14 +561,14 @@ namespace Google.ProtocolBuffers
         /// <summary>
         /// Writes a group field value, without a tag, to the stream.
         /// </summary>
-        public void WriteGroupNoTag(IMessageLite value)
+        public void WriteGroupNoTag(IMessage value)
         {
             value.WriteTo(this);
         }
 
-        public void WriteMessageNoTag(IMessageLite value)
+        public void WriteMessageNoTag(IMessage value)
         {
-            WriteRawVarint32((uint) value.SerializedSize);
+            WriteRawVarint32((uint) value.CalculateSize());
             value.WriteTo(this);
         }
 
@@ -635,9 +583,9 @@ namespace Google.ProtocolBuffers
             WriteRawVarint32(value);
         }
 
-        public void WriteEnumNoTag(int value)
+        public void WriteEnumNoTag<T>(T value) where T : struct, IComparable, IFormattable
         {
-            WriteInt32NoTag(value);
+            WriteInt32NoTag(EnumHelper<T>.ToInt32(value));
         }
 
         public void WriteSFixed32NoTag(int value)
@@ -664,6 +612,7 @@ namespace Google.ProtocolBuffers
 
         #region Write array members
 
+        // TODO(jonskeet): Remove?
         public void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list)
         {
             foreach (object element in list)
@@ -672,25 +621,25 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteGroupArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
-            where T : IMessageLite
+        public void WriteGroupArray<T>(int fieldNumber, string fieldName, RepeatedField<T> list)
+            where T : IMessage
         {
-            foreach (IMessageLite value in list)
+            foreach (IMessage value in list)
             {
                 WriteGroup(fieldNumber, fieldName, value);
             }
         }
 
-        public void WriteMessageArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
-            where T : IMessageLite
+        public void WriteMessageArray<T>(int fieldNumber, string fieldName, RepeatedField<T> list)
+            where T : IMessage
         {
-            foreach (IMessageLite value in list)
+            foreach (IMessage value in list)
             {
                 WriteMessage(fieldNumber, fieldName, value);
             }
         }
 
-        public void WriteStringArray(int fieldNumber, string fieldName, IEnumerable<string> list)
+        public void WriteStringArray(int fieldNumber, string fieldName, RepeatedField<string> list)
         {
             foreach (var value in list)
             {
@@ -698,7 +647,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteBytesArray(int fieldNumber, string fieldName, IEnumerable<ByteString> list)
+        public void WriteBytesArray(int fieldNumber, string fieldName, RepeatedField<ByteString> list)
         {
             foreach (var value in list)
             {
@@ -706,7 +655,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteBoolArray(int fieldNumber, string fieldName, IEnumerable<bool> list)
+        public void WriteBoolArray(int fieldNumber, string fieldName, RepeatedField<bool> list)
         {
             foreach (var value in list)
             {
@@ -714,7 +663,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list)
+        public void WriteInt32Array(int fieldNumber, string fieldName, RepeatedField<int> list)
         {
             foreach (var value in list)
             {
@@ -722,7 +671,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteSInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list)
+        public void WriteSInt32Array(int fieldNumber, string fieldName, RepeatedField<int> list)
         {
             foreach (var value in list)
             {
@@ -730,7 +679,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteUInt32Array(int fieldNumber, string fieldName, IEnumerable<uint> list)
+        public void WriteUInt32Array(int fieldNumber, string fieldName, RepeatedField<uint> list)
         {
             foreach (var value in list)
             {
@@ -738,7 +687,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteFixed32Array(int fieldNumber, string fieldName, IEnumerable<uint> list)
+        public void WriteFixed32Array(int fieldNumber, string fieldName, RepeatedField<uint> list)
         {
             foreach (var value in list)
             {
@@ -746,7 +695,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteSFixed32Array(int fieldNumber, string fieldName, IEnumerable<int> list)
+        public void WriteSFixed32Array(int fieldNumber, string fieldName, RepeatedField<int> list)
         {
             foreach (var value in list)
             {
@@ -754,7 +703,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list)
+        public void WriteInt64Array(int fieldNumber, string fieldName, RepeatedField<long> list)
         {
             foreach (var value in list)
             {
@@ -762,7 +711,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteSInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list)
+        public void WriteSInt64Array(int fieldNumber, string fieldName, RepeatedField<long> list)
         {
             foreach (var value in list)
             {
@@ -770,7 +719,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteUInt64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list)
+        public void WriteUInt64Array(int fieldNumber, string fieldName, RepeatedField<ulong> list)
         {
             foreach (var value in list)
             {
@@ -778,7 +727,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteFixed64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list)
+        public void WriteFixed64Array(int fieldNumber, string fieldName, RepeatedField<ulong> list)
         {
             foreach (var value in list)
             {
@@ -786,7 +735,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteSFixed64Array(int fieldNumber, string fieldName, IEnumerable<long> list)
+        public void WriteSFixed64Array(int fieldNumber, string fieldName, RepeatedField<long> list)
         {
             foreach (var value in list)
             {
@@ -794,7 +743,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteDoubleArray(int fieldNumber, string fieldName, IEnumerable<double> list)
+        public void WriteDoubleArray(int fieldNumber, string fieldName, RepeatedField<double> list)
         {
             foreach (var value in list)
             {
@@ -802,7 +751,7 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteFloatArray(int fieldNumber, string fieldName, IEnumerable<float> list)
+        public void WriteFloatArray(int fieldNumber, string fieldName, RepeatedField<float> list)
         {
             foreach (var value in list)
             {
@@ -810,22 +759,12 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WriteEnumArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)
+        public void WriteEnumArray<T>(int fieldNumber, string fieldName, RepeatedField<T> list)
             where T : struct, IComparable, IFormattable
         {
-            if (list is ICastArray)
+            foreach (T value in list)
             {
-                foreach (int value in ((ICastArray) list).CastArray<int>())
-                {
-                    WriteEnum(fieldNumber, fieldName, value, null /*unused*/);
-                }
-            }
-            else
-            {
-                foreach (object value in list)
-                {
-                    WriteEnum(fieldNumber, fieldName, (int) value, null /*unused*/);
-                }
+                WriteEnum(fieldNumber, fieldName, value);
             }
         }
 
@@ -833,6 +772,7 @@ namespace Google.ProtocolBuffers
 
         #region Write packed array members
 
+        // TODO(jonskeet): Remove?
         public void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list)
         {
             int calculatedSize = 0;
@@ -850,205 +790,215 @@ namespace Google.ProtocolBuffers
             }
         }
 
-        public void WritePackedGroupArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)
-            where T : IMessageLite
-        {
-            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
-            foreach (IMessageLite value in list)
-            {
-                WriteGroupNoTag(value);
-            }
-        }
-
-        public void WritePackedMessageArray<T>(int fieldNumber, string fieldName, int calculatedSize,
-                                               IEnumerable<T> list)
-            where T : IMessageLite
+        // TODO(jonskeet): A lot of these are really inefficient, due to method group conversions. Fix!
+        public void WritePackedBoolArray(int fieldNumber, string fieldName, RepeatedField<bool> list)
         {
-            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
-            foreach (IMessageLite value in list)
+            if (list.Count == 0)
             {
-                WriteMessageNoTag(value);
+                return;
             }
-        }
-
-        public void WritePackedStringArray(int fieldNumber, string fieldName, int calculatedSize,
-                                           IEnumerable<string> list)
-        {
+            uint size = (uint)list.Count;
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
-                WriteStringNoTag(value);
+                WriteBoolNoTag(value);
             }
         }
 
-        public void WritePackedBytesArray(int fieldNumber, string fieldName, int calculatedSize,
-                                          IEnumerable<ByteString> list)
+        public void WritePackedInt32Array(int fieldNumber, string fieldName, RepeatedField<int> list)
         {
-            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
-            foreach (var value in list)
+            if (list.Count == 0)
             {
-                WriteBytesNoTag(value);
+                return;
             }
-        }
-
-        public void WritePackedBoolArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<bool> list)
-        {
+            uint size = list.CalculateSize(ComputeInt32SizeNoTag);
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
-                WriteBoolNoTag(value);
+                WriteInt32NoTag(value);
             }
         }
 
-        public void WritePackedInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list)
+        public void WritePackedSInt32Array(int fieldNumber, string fieldName, RepeatedField<int> list)
         {
-            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
-            foreach (var value in list)
+            if (list.Count == 0)
             {
-                WriteInt32NoTag(value);
+                return;
             }
-        }
-
-        public void WritePackedSInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list)
-        {
+            uint size = list.CalculateSize(ComputeSInt32SizeNoTag);
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteSInt32NoTag(value);
             }
         }
 
-        public void WritePackedUInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<uint> list)
+        public void WritePackedUInt32Array(int fieldNumber, string fieldName, RepeatedField<uint> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = list.CalculateSize(ComputeUInt32SizeNoTag);
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteUInt32NoTag(value);
             }
         }
 
-        public void WritePackedFixed32Array(int fieldNumber, string fieldName, int calculatedSize,
-                                            IEnumerable<uint> list)
+        public void WritePackedFixed32Array(int fieldNumber, string fieldName, RepeatedField<uint> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = (uint) list.Count * 4;
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteFixed32NoTag(value);
             }
         }
 
-        public void WritePackedSFixed32Array(int fieldNumber, string fieldName, int calculatedSize,
-                                             IEnumerable<int> list)
+        public void WritePackedSFixed32Array(int fieldNumber, string fieldName, RepeatedField<int> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = (uint) list.Count * 4;
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteSFixed32NoTag(value);
             }
         }
 
-        public void WritePackedInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list)
+        public void WritePackedInt64Array(int fieldNumber, string fieldName, RepeatedField<long> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = list.CalculateSize(ComputeInt64SizeNoTag);
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteInt64NoTag(value);
             }
         }
 
-        public void WritePackedSInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list)
+        public void WritePackedSInt64Array(int fieldNumber, string fieldName, RepeatedField<long> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = list.CalculateSize(ComputeSInt64SizeNoTag);
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteSInt64NoTag(value);
             }
         }
 
-        public void WritePackedUInt64Array(int fieldNumber, string fieldName, int calculatedSize,
-                                           IEnumerable<ulong> list)
+        public void WritePackedUInt64Array(int fieldNumber, string fieldName, RepeatedField<ulong> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = list.CalculateSize(ComputeUInt64SizeNoTag);
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteUInt64NoTag(value);
             }
         }
 
-        public void WritePackedFixed64Array(int fieldNumber, string fieldName, int calculatedSize,
-                                            IEnumerable<ulong> list)
+        public void WritePackedFixed64Array(int fieldNumber, string fieldName, RepeatedField<ulong> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = (uint) list.Count * 8;
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteFixed64NoTag(value);
             }
         }
 
-        public void WritePackedSFixed64Array(int fieldNumber, string fieldName, int calculatedSize,
-                                             IEnumerable<long> list)
+        public void WritePackedSFixed64Array(int fieldNumber, string fieldName, RepeatedField<long> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = (uint) list.Count * 8;
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteSFixed64NoTag(value);
             }
         }
 
-        public void WritePackedDoubleArray(int fieldNumber, string fieldName, int calculatedSize,
-                                           IEnumerable<double> list)
+        public void WritePackedDoubleArray(int fieldNumber, string fieldName, RepeatedField<double> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = (uint) list.Count * 8;
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteDoubleNoTag(value);
             }
         }
 
-        public void WritePackedFloatArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<float> list)
+        public void WritePackedFloatArray(int fieldNumber, string fieldName, RepeatedField<float> list)
         {
+            if (list.Count == 0)
+            {
+                return;
+            }
+            uint size = (uint) list.Count * 4;
             WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
+            WriteRawVarint32(size);
             foreach (var value in list)
             {
                 WriteFloatNoTag(value);
             }
         }
 
-        public void WritePackedEnumArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)
+        public void WritePackedEnumArray<T>(int fieldNumber, string fieldName, RepeatedField<T> list)
             where T : struct, IComparable, IFormattable
         {
-            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
-            WriteRawVarint32((uint) calculatedSize);
-            if (list is ICastArray)
+            if (list.Count == 0)
             {
-                foreach (int value in ((ICastArray) list).CastArray<int>())
-                {
-                    WriteEnumNoTag(value);
-                }
+                return;
             }
-            else
+            uint size = list.CalculateSize(ComputeEnumSizeNoTag);
+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
+            WriteRawVarint32(size);
+            foreach (T value in list)
             {
-                foreach (object value in list)
-                {
-                    WriteEnumNoTag((int) value);
-                }
+                WriteEnumNoTag(value);
             }
         }
 

+ 1 - 1
csharp/src/ProtocolBuffers/Collections/Dictionaries.cs

@@ -33,7 +33,7 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 
-namespace Google.ProtocolBuffers.Collections
+namespace Google.Protobuf.Collections
 {
     /// <summary>
     /// Utility class for dictionaries.

+ 1 - 1
csharp/src/ProtocolBuffers/Collections/Enumerables.cs

@@ -32,7 +32,7 @@
 using System;
 using System.Collections;
 
-namespace Google.ProtocolBuffers.Collections
+namespace Google.Protobuf.Collections
 {
     /// <summary>
     /// Utility class for IEnumerable (and potentially the generic version in the future).

+ 0 - 58
csharp/src/ProtocolBuffers/Collections/IPopsicleList.cs

@@ -1,58 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-using System.Collections.Generic;
-
-namespace Google.ProtocolBuffers.Collections
-{
-    /// <summary>
-    /// A list which has an Add method which accepts an IEnumerable[T].
-    /// This allows whole collections to be added easily using collection initializers.
-    /// It causes a potential overload confusion if T : IEnumerable[T], but in
-    /// practice that won't happen in protocol buffers.
-    /// </summary>
-    /// <remarks>This is only currently implemented by PopsicleList, and it's likely
-    /// to stay that way - hence the name. More genuinely descriptive names are
-    /// horribly ugly. (At least, the ones the author could think of...)</remarks>
-    /// <typeparam name="T">The element type of the list</typeparam>
-    public interface IPopsicleList<T> : IList<T>
-    {
-        void Add(IEnumerable<T> collection);
-    }
-
-    /// <summary>
-    /// Used to efficiently cast the elements of enumerations
-    /// </summary>
-    internal interface ICastArray
-    {
-        IEnumerable<TItemType> CastArray<TItemType>();
-    }
-}

+ 1 - 1
csharp/src/ProtocolBuffers/Collections/Lists.cs

@@ -32,7 +32,7 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 
-namespace Google.ProtocolBuffers.Collections
+namespace Google.Protobuf.Collections
 {
     /// <summary>
     /// Utility non-generic class for calling into Lists{T} using type inference.

+ 0 - 208
csharp/src/ProtocolBuffers/Collections/PopsicleList.cs

@@ -1,208 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-using System;
-using System.Collections;
-using System.Collections.Generic;
-
-namespace Google.ProtocolBuffers.Collections
-{
-    /// <summary>
-    /// Proxies calls to a <see cref="List{T}" />, but allows the list
-    /// to be made read-only (with the <see cref="MakeReadOnly" /> method), 
-    /// after which any modifying methods throw <see cref="NotSupportedException" />.
-    /// </summary>
-    public sealed class PopsicleList<T> : IPopsicleList<T>, ICastArray
-    {
-        private static readonly bool CheckForNull = default(T) == null;
-        private static readonly T[] EmptySet = new T[0];
-
-        private List<T> items;
-        private bool readOnly;
-
-        /// <summary>
-        /// Makes this list read-only ("freezes the popsicle"). From this
-        /// point on, mutating methods (Clear, Add etc) will throw a
-        /// NotSupportedException. There is no way of "defrosting" the list afterwards.
-        /// </summary>
-        public void MakeReadOnly()
-        {
-            readOnly = true;
-        }
-
-        public int IndexOf(T item)
-        {
-            return items == null ? -1 : items.IndexOf(item);
-        }
-
-        public void Insert(int index, T item)
-        {
-            ValidateModification();
-            if (CheckForNull)
-            {
-                ThrowHelper.ThrowIfNull(item);
-            }
-            items.Insert(index, item);
-        }
-
-        public void RemoveAt(int index)
-        {
-            ValidateModification();
-            items.RemoveAt(index);
-        }
-
-        public T this[int index]
-        {
-            get
-            {
-                if (items == null)
-                {
-                    throw new ArgumentOutOfRangeException();
-                }
-                return items[index];
-            }
-            set
-            {
-                ValidateModification();
-                if (CheckForNull)
-                {
-                    ThrowHelper.ThrowIfNull(value);
-                }
-                items[index] = value;
-            }
-        }
-
-        public void Add(T item)
-        {
-            ValidateModification();
-            if (CheckForNull)
-            {
-                ThrowHelper.ThrowIfNull(item);
-            }
-            items.Add(item);
-        }
-
-        public void Clear()
-        {
-            ValidateModification();
-            items.Clear();
-        }
-
-        public bool Contains(T item)
-        {
-            return items == null ? false : items.Contains(item);
-        }
-
-        public void CopyTo(T[] array, int arrayIndex)
-        {
-            if (items != null)
-            {
-                items.CopyTo(array, arrayIndex);
-            }
-        }
-
-        public int Count
-        {
-            get { return items == null ? 0 : items.Count; }
-        }
-
-        public bool IsReadOnly
-        {
-            get { return readOnly; }
-        }
-
-        public bool Remove(T item)
-        {
-            ValidateModification();
-            return items.Remove(item);
-        }
-
-        public IEnumerator<T> GetEnumerator()
-        {
-            IEnumerable<T> tenum = (IEnumerable<T>)items ?? EmptySet;
-            return tenum.GetEnumerator();
-        }
-
-        IEnumerator IEnumerable.GetEnumerator()
-        {
-            return GetEnumerator();
-        }
-
-        public void Add(IEnumerable<T> collection)
-        {
-            ValidateModification();
-            ThrowHelper.ThrowIfNull(collection);
-
-            if (!CheckForNull || collection is PopsicleList<T>)
-            {
-                items.AddRange(collection);
-            }
-            else
-            {
-                // Assumption, it's ok to enumerate collections more than once.
-                if (collection is ICollection<T>)
-                {
-                    ThrowHelper.ThrowIfAnyNull(collection);
-                    items.AddRange(collection);
-                }
-                else
-                {
-                    foreach (T item in collection)
-                    {
-                        ThrowHelper.ThrowIfNull(item);
-                        items.Add(item);
-                    }
-                }
-            }
-        }
-
-        private void ValidateModification()
-        {
-            if (readOnly)
-            {
-                throw new NotSupportedException("List is read-only");
-            }
-            if (items == null)
-            {
-                items = new List<T>();
-            }
-        }
-
-        IEnumerable<TItemType> ICastArray.CastArray<TItemType>()
-        {
-            if (items == null)
-            {
-                return PopsicleList<TItemType>.EmptySet;
-            }
-            return (TItemType[]) (object) items.ToArray();
-        }
-    }
-}

+ 1 - 1
csharp/src/ProtocolBuffers/Collections/ReadOnlyDictionary.cs

@@ -33,7 +33,7 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 
-namespace Google.ProtocolBuffers.Collections
+namespace Google.Protobuf.Collections
 {
     /// <summary>
     /// Read-only wrapper around another dictionary.

+ 168 - 0
csharp/src/ProtocolBuffers/Collections/RepeatedField.cs

@@ -0,0 +1,168 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace Google.Protobuf.Collections
+{
+    public sealed class RepeatedField<T> : IList<T>, IEquatable<RepeatedField<T>>
+    {
+        private readonly List<T> list = new List<T>();
+
+        public void Add(T item)
+        {
+            if (item == null)
+            {
+                throw new ArgumentNullException("item");
+            }
+            list.Add(item);
+        }
+
+        public void Clear()
+        {
+            list.Clear();
+        }
+
+        public bool Contains(T item)
+        {
+            if (item == null)
+            {
+                throw new ArgumentNullException("item");
+            }
+            return list.Contains(item);
+        }
+
+        public void CopyTo(T[] array, int arrayIndex)
+        {
+            list.CopyTo(array);
+        }
+
+        public bool Remove(T item)
+        {
+            if (item == null)
+            {
+                throw new ArgumentNullException("item");
+            }
+            return list.Remove(item);
+        }
+
+        public int Count { get { return list.Count; } }
+
+        // TODO(jonskeet): If we implement freezing, make this reflect it.
+        public bool IsReadOnly { get { return false; } }
+
+        public void Add(RepeatedField<T> values)
+        {
+            if (values == null)
+            {
+                throw new ArgumentNullException("values");
+            }
+            // We know that all the values will be valid, because it's a RepeatedField.
+            list.AddRange(values);
+        }
+
+        public void Add(IEnumerable<T> values)
+        {
+            if (values == null)
+            {
+                throw new ArgumentNullException("values");
+            }
+            foreach (T item in values)
+            {
+                Add(item);
+            }
+        }
+
+        // TODO(jonskeet): Create our own mutable struct for this, rather than relying on List<T>.
+        public List<T>.Enumerator GetEnumerator()
+        {
+            return list.GetEnumerator();
+        }
+
+        IEnumerator<T> IEnumerable<T>.GetEnumerator()
+        {
+            return list.GetEnumerator();
+        }
+
+        public override bool Equals(object obj)
+        {
+            return Equals(obj as RepeatedField<T>);
+        }
+
+        public override int GetHashCode()
+        {
+            int hash = 23;
+            foreach (T item in this)
+            {
+                hash = hash * 31 + item.GetHashCode();
+            }
+            return hash;
+        }
+
+        IEnumerator IEnumerable.GetEnumerator()
+        {
+            return GetEnumerator();
+        }
+
+        public bool Equals(RepeatedField<T> other)
+        {
+            if (ReferenceEquals(other, null))
+            {
+                return false;
+            }
+            if (ReferenceEquals(other, this))
+            {
+                return true;
+            }
+            if (other.Count != this.Count)
+            {
+                return false;
+            }
+            // TODO(jonskeet): Does this box for enums?
+            EqualityComparer<T> comparer = EqualityComparer<T>.Default;
+            for (int i = 0; i < Count; i++)
+            {
+                if (!comparer.Equals(this[i], other[i]))
+                {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        public int IndexOf(T item)
+        {
+            if (item == null)
+            {
+                throw new ArgumentNullException("item");
+            }
+            return list.IndexOf(item);
+        }
+
+        public void Insert(int index, T item)
+        {
+            if (item == null)
+            {
+                throw new ArgumentNullException("item");
+            }
+            list.Insert(index, item);
+        }
+
+        public void RemoveAt(int index)
+        {
+            list.RemoveAt(index);
+        }
+
+        public T this[int index]
+        {
+            get { return list[index]; }
+            set
+            {
+                if (value == null)
+                {
+                    throw new ArgumentNullException("value");
+                }
+                list[index] = value;
+            }
+        }
+    }
+}

+ 47 - 0
csharp/src/ProtocolBuffers/Collections/RepeatedFieldExtensions.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Google.Protobuf.Collections
+{
+    public static class RepeatedFieldExtensions
+    {
+        internal static uint CalculateSize<T>(this RepeatedField<T> list, Func<T, int> sizeComputer)
+        {
+            int size = 0;
+            foreach (var item in list)
+            {
+                size += sizeComputer(item);
+            }
+            return (uint)size;
+        }
+
+        /*
+        /// <summary>
+        /// Calculates the serialized data size, including one tag per value.
+        /// </summary>
+        public static int CalculateTotalSize<T>(this RepeatedField<T> list, int tagSize, Func<T, int> sizeComputer)
+        {
+            if (list.Count == 0)
+            {
+                return 0;
+            }
+            return (int)(dataSize + tagSize * list.Count);
+        }
+
+        /// <summary>
+        /// Calculates the serialized data size, as a packed array (tag, length, data).
+        /// </summary>
+        public static int CalculateTotalPackedSize(int tagSize)
+        {
+            if (Count == 0)
+            {
+                return 0;
+            }
+            uint dataSize = CalculateSize();
+            return tagSize + CodedOutputStream.ComputeRawVarint32Size(dataSize) + (int)dataSize;
+        }
+        */
+    }
+}

Разница между файлами не показана из-за своего большого размера
+ 937 - 2581
csharp/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs


+ 1 - 1
csharp/src/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs

@@ -29,7 +29,7 @@
 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-namespace Google.ProtocolBuffers.DescriptorProtos
+namespace Google.Protobuf.DescriptorProtos
 {
     /// <summary>
     /// Interface implemented by all DescriptorProtos. The generator doesn't

+ 1 - 1
csharp/src/ProtocolBuffers/DescriptorProtos/PartialClasses.cs

@@ -33,7 +33,7 @@
 // This file just contains partial classes for each of the
 // autogenerated classes, so that they implement
 // IDescriptorProto
-namespace Google.ProtocolBuffers.DescriptorProtos
+namespace Google.Protobuf.DescriptorProtos
 {
     public partial class DescriptorProto : IDescriptorProto<MessageOptions>
     {

+ 3 - 2
csharp/src/ProtocolBuffers/Descriptors/DescriptorBase.cs

@@ -29,10 +29,11 @@
 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
+    // TODO(jonskeet): The descriptor type hierarchy needs changing so that we can hide the descriptor protos.
     /// <summary>
     /// Base class for nearly all descriptors, providing common functionality.
     /// </summary>

+ 2 - 2
csharp/src/ProtocolBuffers/Descriptors/DescriptorPool.cs

@@ -34,7 +34,7 @@ using System.Collections.Generic;
 using System.Text;
 using System.Text.RegularExpressions;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Contains lookup tables containing all the descriptors defined in a particular file.
@@ -85,7 +85,7 @@ namespace Google.ProtocolBuffers.Descriptors
         /// <param name="fullName">Fully-qualified name to look up</param>
         /// <returns>The symbol with the given name and type,
         /// or null if the symbol doesn't exist or has the wrong type</returns>
-        internal T FindSymbol<T>(string fullName) where T : class, IDescriptor
+        internal T FindSymbol<T>(string fullName) where T : class
         {
             IDescriptor result;
             descriptorsByName.TryGetValue(fullName, out result);

+ 2 - 2
csharp/src/ProtocolBuffers/Descriptors/DescriptorUtil.cs

@@ -30,9 +30,9 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 using System.Collections.Generic;
-using Google.ProtocolBuffers.Collections;
+using Google.Protobuf.Collections;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Internal class containing utility methods when working with descriptors.

+ 1 - 12
csharp/src/ProtocolBuffers/Descriptors/DescriptorValidationException.cs

@@ -31,7 +31,7 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 using System;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Thrown when building descriptors fails because the source DescriptorProtos
@@ -40,7 +40,6 @@ namespace Google.ProtocolBuffers.Descriptors
     public sealed class DescriptorValidationException : Exception
     {
         private readonly String name;
-        private readonly IMessage proto;
         private readonly string description;
 
         /// <value>
@@ -51,14 +50,6 @@ namespace Google.ProtocolBuffers.Descriptors
             get { return name; }
         }
 
-        /// <value>
-        /// The protocol message representation of the invalid descriptor.
-        /// </value>
-        public IMessage ProblemProto
-        {
-            get { return proto; }
-        }
-
         /// <value>
         /// A human-readable description of the error. (The Message property
         /// is made up of the descriptor's name and this description.)
@@ -75,7 +66,6 @@ namespace Google.ProtocolBuffers.Descriptors
             // don't want to expose it directly to the user.  So, we only provide
             // the name and the original proto.
             name = problemDescriptor.FullName;
-            proto = problemDescriptor.Proto;
             this.description = description;
         }
 
@@ -83,7 +73,6 @@ namespace Google.ProtocolBuffers.Descriptors
             base(problemDescriptor.FullName + ": " + description, cause)
         {
             name = problemDescriptor.FullName;
-            proto = problemDescriptor.Proto;
             this.description = description;
         }
     }

+ 6 - 25
csharp/src/ProtocolBuffers/Descriptors/EnumDescriptor.cs

@@ -30,15 +30,14 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 using System.Collections.Generic;
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Descriptor for an enum type in a .proto file.
     /// </summary>
-    public sealed class EnumDescriptor : IndexedDescriptorBase<EnumDescriptorProto, EnumOptions>,
-                                         IEnumLiteMap<EnumValueDescriptor>
+    public sealed class EnumDescriptor : IndexedDescriptorBase<EnumDescriptorProto, EnumOptions>
     {
         private readonly MessageDescriptor containingType;
         private readonly IList<EnumValueDescriptor> values;
@@ -48,14 +47,14 @@ namespace Google.ProtocolBuffers.Descriptors
         {
             containingType = parent;
 
-            if (proto.ValueCount == 0)
+            if (proto.Value.Count == 0)
             {
                 // We cannot allow enums with no values because this would mean there
                 // would be no valid default value for fields of this type.
                 throw new DescriptorValidationException(this, "Enums must contain at least one value.");
             }
 
-            values = DescriptorUtil.ConvertAndMakeReadOnly(proto.ValueList,
+            values = DescriptorUtil.ConvertAndMakeReadOnly(proto.Value,
                                                            (value, i) => new EnumValueDescriptor(value, file, this, i));
 
             File.DescriptorPool.AddSymbol(this);
@@ -77,14 +76,6 @@ namespace Google.ProtocolBuffers.Descriptors
             get { return values; }
         }
 
-        /// <summary>
-        /// Logic moved from FieldSet to continue current behavior
-        /// </summary>
-        public bool IsValidValue(IEnumLite value)
-        {
-            return value is EnumValueDescriptor && ((EnumValueDescriptor) value).EnumDescriptor == this;
-        }
-
         /// <summary>
         /// Finds an enum value by number. If multiple enum values have the
         /// same number, this returns the first defined value with that number.
@@ -94,16 +85,6 @@ namespace Google.ProtocolBuffers.Descriptors
             return File.DescriptorPool.FindEnumValueByNumber(this, number);
         }
 
-        IEnumLite IEnumLiteMap.FindValueByNumber(int number)
-        {
-            return FindValueByNumber(number);
-        }
-
-        IEnumLite IEnumLiteMap.FindValueByName(string name)
-        {
-            return FindValueByName(name);
-        }
-
         /// <summary>
         /// Finds an enum value by name.
         /// </summary>
@@ -119,7 +100,7 @@ namespace Google.ProtocolBuffers.Descriptors
             base.ReplaceProto(newProto);
             for (int i = 0; i < values.Count; i++)
             {
-                values[i].ReplaceProto(newProto.GetValue(i));
+                values[i].ReplaceProto(newProto.Value[i]);
             }
         }
     }

+ 3 - 4
csharp/src/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs

@@ -29,15 +29,14 @@
 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Descriptor for a single enum value within an enum in a .proto file.
     /// </summary>
-    public sealed class EnumValueDescriptor : IndexedDescriptorBase<EnumValueDescriptorProto, EnumValueOptions>,
-                                              IEnumLite
+    public sealed class EnumValueDescriptor : IndexedDescriptorBase<EnumValueDescriptorProto, EnumValueOptions>                                              
     {
         private readonly EnumDescriptor enumDescriptor;
 

+ 17 - 206
csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs

@@ -32,23 +32,22 @@
 using System;
 using System.Collections.Generic;
 using System.Reflection;
-using Google.ProtocolBuffers.Collections;
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.Collections;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Descriptor for a field or extension within a message in a .proto file.
     /// </summary>
     public sealed class FieldDescriptor : IndexedDescriptorBase<FieldDescriptorProto, FieldOptions>,
-                                          IComparable<FieldDescriptor>, IFieldDescriptorLite
+                                          IComparable<FieldDescriptor>
     {
         private readonly MessageDescriptor extensionScope;
         private EnumDescriptor enumType;
         private MessageDescriptor messageType;
         private MessageDescriptor containingType;
         private OneofDescriptor containingOneof;
-        private object defaultValue;
         private FieldType fieldType;
         private MappedType mappedType;
 
@@ -58,7 +57,7 @@ namespace Google.ProtocolBuffers.Descriptors
                                  MessageDescriptor parent, int index, bool isExtension)
             : base(proto, file, ComputeFullName(file, parent, proto.Name), index)
         {
-            if (proto.HasType)
+            if (proto.Type != 0)
             {
                 fieldType = GetFieldTypeFromProtoType(proto.Type);
                 mappedType = FieldTypeToMappedTypeMap[fieldType];
@@ -72,7 +71,7 @@ namespace Google.ProtocolBuffers.Descriptors
 
             if (isExtension)
             {
-                if (!proto.HasExtendee)
+                if (proto.Extendee != "")
                 {
                     throw new DescriptorValidationException(this,
                                                             "FieldDescriptorProto.Extendee not set for extension field.");
@@ -89,15 +88,10 @@ namespace Google.ProtocolBuffers.Descriptors
             }
             else
             {
-                if (proto.HasExtendee)
-                {
-                    throw new DescriptorValidationException(this,
-                                                            "FieldDescriptorProto.Extendee set for non-extension field.");
-                }
                 containingType = parent;
-                if (proto.HasOneofIndex)
+                if (proto.OneofIndex != 0)
                 {
-                    if (proto.OneofIndex < 0 || proto.OneofIndex >= parent.Proto.OneofDeclCount)
+                    if (proto.OneofIndex < 0 || proto.OneofIndex >= parent.Proto.OneofDecl.Count)
                     {
                         throw new DescriptorValidationException(this,
                             "FieldDescriptorProto.oneof_index is out of range for type " + parent.Name);
@@ -213,48 +207,15 @@ namespace Google.ProtocolBuffers.Descriptors
             get { return Proto.Options.Packed; }
         }
 
-        /// <valule>
-        /// Indicates whether or not the field had an explicitly-defined default value.
-        /// </value>
-        public bool HasDefaultValue
-        {
-            get { return Proto.HasDefaultValue; }
-        }
-
         /// <value>
-        /// The field's default value. Valid for all types except messages
-        /// and groups. For all other types, the object returned is of the
-        /// same class that would be returned by IMessage[this].
-        /// For repeated fields this will always be an empty immutable list compatible with IList[object].
-        /// For message fields it will always be null. For singular values, it will depend on the descriptor.
+        /// Indicates whether or not this field is an extension. (Only relevant when parsing
+        /// the proto2 descriptor...)
         /// </value>
-        public object DefaultValue
+        internal bool IsExtension
         {
-            get
-            {
-                if (MappedType == MappedType.Message)
-                {
-                    throw new InvalidOperationException(
-                        "FieldDescriptor.DefaultValue called on an embedded message field.");
-                }
-                return defaultValue;
-            }
+            get { return Proto.Extendee != ""; }
         }
 
-        /// <value>
-        /// Indicates whether or not this field is an extension.
-        /// </value>
-        public bool IsExtension
-        {
-            get { return Proto.HasExtendee; }
-        }
-
-        /*
-     * Get the field's containing type. For extensions, this is the type being
-     * extended, not the location where the extension was defined.  See
-     * {@link #getExtensionScope()}.
-     */
-
         /// <summary>
         /// Get the field's containing type. For extensions, this is the type being
         /// extended, not the location where the extension was defined. See
@@ -335,27 +296,6 @@ namespace Google.ProtocolBuffers.Descriptors
             return FieldNumber - other.FieldNumber;
         }
 
-        /// <summary>
-        /// Compares this descriptor with another one, ordering in "canonical" order
-        /// which simply means ascending order by field number. <paramref name="other"/>
-        /// must be a field of the same type, i.e. the <see cref="ContainingType"/> of
-        /// both fields must be the same.
-        /// </summary>
-        public int CompareTo(IFieldDescriptorLite other)
-        {
-            return FieldNumber - other.FieldNumber;
-        }
-
-        IEnumLiteMap IFieldDescriptorLite.EnumType
-        {
-            get { return EnumType; }
-        }
-
-        bool IFieldDescriptorLite.MessageSetWireFormat
-        {
-            get { return ContainingType.Options.MessageSetWireFormat; }
-        }
-
         /// <summary>
         /// For enum fields, returns the field's type.
         /// </summary>
@@ -410,29 +350,12 @@ namespace Google.ProtocolBuffers.Descriptors
         /// </summary>
         internal void CrossLink()
         {
-            if (Proto.HasExtendee)
-            {
-                IDescriptor extendee = File.DescriptorPool.LookupSymbol(Proto.Extendee, this);
-                if (!(extendee is MessageDescriptor))
-                {
-                    throw new DescriptorValidationException(this, "\"" + Proto.Extendee + "\" is not a message type.");
-                }
-                containingType = (MessageDescriptor) extendee;
-
-                if (!containingType.IsExtensionNumber(FieldNumber))
-                {
-                    throw new DescriptorValidationException(this,
-                                                            "\"" + containingType.FullName + "\" does not declare " +
-                                                            FieldNumber + " as an extension number.");
-                }
-            }
-
-            if (Proto.HasTypeName)
+            if (Proto.TypeName != "")
             {
                 IDescriptor typeDescriptor =
                     File.DescriptorPool.LookupSymbol(Proto.TypeName, this);
 
-                if (!Proto.HasType)
+                if (Proto.Type != 0)
                 {
                     // Choose field type based on symbol.
                     if (typeDescriptor is MessageDescriptor)
@@ -460,7 +383,7 @@ namespace Google.ProtocolBuffers.Descriptors
                     }
                     messageType = (MessageDescriptor) typeDescriptor;
 
-                    if (Proto.HasDefaultValue)
+                    if (Proto.DefaultValue != "")
                     {
                         throw new DescriptorValidationException(this, "Messages can't have default values.");
                     }
@@ -486,126 +409,14 @@ namespace Google.ProtocolBuffers.Descriptors
                 }
             }
 
-            // We don't attempt to parse the default value until here because for
-            // enums we need the enum type's descriptor.
-            if (Proto.HasDefaultValue)
-            {
-                if (IsRepeated)
-                {
-                    throw new DescriptorValidationException(this, "Repeated fields cannot have default values.");
-                }
-
-                try
-                {
-                    switch (FieldType)
-                    {
-                        case FieldType.Int32:
-                        case FieldType.SInt32:
-                        case FieldType.SFixed32:
-                            defaultValue = TextFormat.ParseInt32(Proto.DefaultValue);
-                            break;
-                        case FieldType.UInt32:
-                        case FieldType.Fixed32:
-                            defaultValue = TextFormat.ParseUInt32(Proto.DefaultValue);
-                            break;
-                        case FieldType.Int64:
-                        case FieldType.SInt64:
-                        case FieldType.SFixed64:
-                            defaultValue = TextFormat.ParseInt64(Proto.DefaultValue);
-                            break;
-                        case FieldType.UInt64:
-                        case FieldType.Fixed64:
-                            defaultValue = TextFormat.ParseUInt64(Proto.DefaultValue);
-                            break;
-                        case FieldType.Float:
-                            defaultValue = TextFormat.ParseFloat(Proto.DefaultValue);
-                            break;
-                        case FieldType.Double:
-                            defaultValue = TextFormat.ParseDouble(Proto.DefaultValue);
-                            break;
-                        case FieldType.Bool:
-                            if (Proto.DefaultValue == "true")
-                            {
-                                defaultValue = true;
-                            }
-                            else if (Proto.DefaultValue == "false")
-                            {
-                                defaultValue = false;
-                            }
-                            else
-                            {
-                                throw new FormatException("Boolean values must be \"true\" or \"false\"");
-                            }
-                            break;
-                        case FieldType.String:
-                            defaultValue = Proto.DefaultValue;
-                            break;
-                        case FieldType.Bytes:
-                            try
-                            {
-                                defaultValue = TextFormat.UnescapeBytes(Proto.DefaultValue);
-                            }
-                            catch (FormatException e)
-                            {
-                                throw new DescriptorValidationException(this,
-                                                                        "Couldn't parse default value: " + e.Message);
-                            }
-                            break;
-                        case FieldType.Enum:
-                            defaultValue = enumType.FindValueByName(Proto.DefaultValue);
-                            if (defaultValue == null)
-                            {
-                                throw new DescriptorValidationException(this,
-                                                                        "Unknown enum default value: \"" +
-                                                                        Proto.DefaultValue + "\"");
-                            }
-                            break;
-                        case FieldType.Message:
-                        case FieldType.Group:
-                            throw new DescriptorValidationException(this, "Message type had default value.");
-                    }
-                }
-                catch (FormatException e)
-                {
-                    DescriptorValidationException validationException =
-                        new DescriptorValidationException(this,
-                                                          "Could not parse default value: \"" + Proto.DefaultValue +
-                                                          "\"", e);
-                    throw validationException;
-                }
-            }
-            else
-            {
-                // Determine the default default for this field.
-                if (IsRepeated)
-                {
-                    defaultValue = Lists<object>.Empty;
-                }
-                else
-                {
-                    switch (MappedType)
-                    {
-                        case MappedType.Enum:
-                            // We guarantee elsewhere that an enum type always has at least
-                            // one possible value.
-                            defaultValue = enumType.Values[0];
-                            break;
-                        case MappedType.Message:
-                            defaultValue = null;
-                            break;
-                        default:
-                            defaultValue = GetDefaultValueForMappedType(MappedType);
-                            break;
-                    }
-                }
-            }
+            // Note: no attempt to perform any default value parsing
 
             if (!IsExtension)
             {
                 File.DescriptorPool.AddFieldByNumber(this);
             }
 
-            if (containingType != null && containingType.Options.MessageSetWireFormat)
+            if (containingType != null && containingType.Options != null && containingType.Options.MessageSetWireFormat)
             {
                 if (IsExtension)
                 {

+ 2 - 2
csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs

@@ -32,9 +32,9 @@
 using System;
 using System.Collections.Generic;
 using System.Reflection;
-using Google.ProtocolBuffers.Collections;
+using Google.Protobuf.Collections;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Defined specifically for the <see cref="FieldType" /> enumeration,

+ 1 - 1
csharp/src/ProtocolBuffers/Descriptors/FieldType.cs

@@ -30,7 +30,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Enumeration of all the possible field types. The odd formatting is to make it very clear

+ 19 - 36
csharp/src/ProtocolBuffers/Descriptors/FileDescriptor.cs

@@ -33,10 +33,10 @@ using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.IO;
-using Google.ProtocolBuffers.DescriptorProtos;
-using FileOptions = Google.ProtocolBuffers.DescriptorProtos.FileOptions;
+using Google.Protobuf.DescriptorProtos;
+using FileOptions = Google.Protobuf.DescriptorProtos.FileOptions;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Describes a .proto file, including everything defined within.
@@ -75,19 +75,19 @@ namespace Google.ProtocolBuffers.Descriptors
 
             pool.AddPackage(Package, this);
 
-            messageTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.MessageTypeList,
+            messageTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.MessageType,
                                                                  (message, index) =>
                                                                  new MessageDescriptor(message, this, null, index));
 
-            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList,
+            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumType,
                                                               (enumType, index) =>
                                                               new EnumDescriptor(enumType, this, null, index));
 
-            services = DescriptorUtil.ConvertAndMakeReadOnly(proto.ServiceList,
+            services = DescriptorUtil.ConvertAndMakeReadOnly(proto.Service,
                                                              (service, index) =>
                                                              new ServiceDescriptor(service, this, index));
 
-            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList,
+            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.Extension,
                                                                (field, index) =>
                                                                new FieldDescriptor(field, this, null, index, true));
         }
@@ -104,14 +104,14 @@ namespace Google.ProtocolBuffers.Descriptors
                 nameToFileMap[file.Name] = file;
             }
             var publicDependencies = new List<FileDescriptor>();
-            for (int i = 0; i < proto.PublicDependencyCount; i++)
+            for (int i = 0; i < proto.PublicDependency.Count; i++)
             {
-                int index = proto.PublicDependencyList[i];
-                if (index < 0 || index >= proto.DependencyCount)
+                int index = proto.PublicDependency[i];
+                if (index < 0 || index >= proto.Dependency.Count)
                 {
                     throw new DescriptorValidationException(@this, "Invalid public dependency index.");
                 }
-                string name = proto.DependencyList[index];
+                string name = proto.Dependency[index];
                 FileDescriptor file = nameToFileMap[name];
                 if (file == null)
                 {
@@ -371,7 +371,7 @@ namespace Google.ProtocolBuffers.Descriptors
         /// </summary>
         public static FileDescriptor InternalBuildGeneratedFileFrom(byte[] descriptorData, FileDescriptor[] dependencies)
         {
-            return InternalBuildGeneratedFileFrom(descriptorData, dependencies, x => null);
+            return InternalBuildGeneratedFileFrom(descriptorData, dependencies, x => { });
         }
 
         /// <summary>
@@ -384,9 +384,7 @@ namespace Google.ProtocolBuffers.Descriptors
         /// in descriptor.proto. The callback may also return null to indicate that
         /// no extensions are used in the descriptor.
         /// </summary>
-        /// <param name="descriptor"></param>
-        /// <returns></returns>
-        public delegate ExtensionRegistry InternalDescriptorAssigner(FileDescriptor descriptor);
+        public delegate void InternalDescriptorAssigner(FileDescriptor descriptor);
 
         public static FileDescriptor InternalBuildGeneratedFileFrom(byte[] descriptorData,
                                                                     FileDescriptor[] dependencies,
@@ -395,7 +393,7 @@ namespace Google.ProtocolBuffers.Descriptors
             FileDescriptorProto proto;
             try
             {
-                proto = FileDescriptorProto.ParseFrom(descriptorData);
+                proto = FileDescriptorProto.Parser.ParseFrom(descriptorData);
             }
             catch (InvalidProtocolBufferException e)
             {
@@ -414,22 +412,7 @@ namespace Google.ProtocolBuffers.Descriptors
                 throw new ArgumentException("Invalid embedded descriptor for \"" + proto.Name + "\".", e);
             }
 
-            ExtensionRegistry registry = descriptorAssigner(result);
-
-            if (registry != null)
-            {
-                // We must re-parse the proto using the registry.
-                try
-                {
-                    proto = FileDescriptorProto.ParseFrom(descriptorData, registry);
-                }
-                catch (InvalidProtocolBufferException e)
-                {
-                    throw new ArgumentException("Failed to parse protocol buffer descriptor for generated code.", e);
-                }
-
-                result.ReplaceProto(proto);
-            }
+            descriptorAssigner(result);
             return result;
         }
 
@@ -449,22 +432,22 @@ namespace Google.ProtocolBuffers.Descriptors
 
             for (int i = 0; i < messageTypes.Count; i++)
             {
-                messageTypes[i].ReplaceProto(proto.GetMessageType(i));
+                messageTypes[i].ReplaceProto(proto.MessageType[i]);
             }
 
             for (int i = 0; i < enumTypes.Count; i++)
             {
-                enumTypes[i].ReplaceProto(proto.GetEnumType(i));
+                enumTypes[i].ReplaceProto(proto.EnumType[i]);
             }
 
             for (int i = 0; i < services.Count; i++)
             {
-                services[i].ReplaceProto(proto.GetService(i));
+                services[i].ReplaceProto(proto.Service[i]);
             }
 
             for (int i = 0; i < extensions.Count; i++)
             {
-                extensions[i].ReplaceProto(proto.GetExtension(i));
+                extensions[i].ReplaceProto(proto.Extension[i]);
             }
         }
 

+ 2 - 2
csharp/src/ProtocolBuffers/Descriptors/IDescriptor.cs

@@ -30,7 +30,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// The non-generic form of the IDescriptor interface. Useful for describing a general
@@ -48,7 +48,7 @@ namespace Google.ProtocolBuffers.Descriptors
     /// Strongly-typed form of the IDescriptor interface.
     /// </summary>
     /// <typeparam name="TProto">Protocol buffer type underlying this descriptor type</typeparam>
-    public interface IDescriptor<TProto> : IDescriptor where TProto : IMessage
+    internal interface IDescriptor<TProto> : IDescriptor where TProto : IMessage
     {
         new TProto Proto { get; }
     }

+ 2 - 2
csharp/src/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs

@@ -29,9 +29,9 @@
 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Base class for descriptors which are also indexed. This is all of them other than

+ 1 - 1
csharp/src/ProtocolBuffers/Descriptors/MappedType.cs

@@ -30,7 +30,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Type as it's mapped onto a .NET type.

+ 15 - 15
csharp/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs

@@ -31,9 +31,9 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 using System;
 using System.Collections.Generic;
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Describes a message type.
@@ -53,33 +53,33 @@ namespace Google.ProtocolBuffers.Descriptors
         {
             containingType = parent;
 
-            oneofs = DescriptorUtil.ConvertAndMakeReadOnly(proto.OneofDeclList,
+            oneofs = DescriptorUtil.ConvertAndMakeReadOnly(proto.OneofDecl,
                                                                (oneof, index) =>
                                                                new OneofDescriptor(oneof, file, this, index));
 
-            nestedTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.NestedTypeList,
+            nestedTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.NestedType,
                                                                 (type, index) =>
                                                                 new MessageDescriptor(type, file, this, index));
 
-            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList,
+            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumType,
                                                               (type, index) =>
                                                               new EnumDescriptor(type, file, this, index));
 
             // TODO(jonskeet): Sort fields first?
-            fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.FieldList,
+            fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.Field,
                                                            (field, index) =>
                                                            new FieldDescriptor(field, file, this, index, false));
 
-            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList,
+            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.Extension,
                                                                (field, index) =>
                                                                new FieldDescriptor(field, file, this, index, true));
 
-            for (int i = 0; i < proto.OneofDeclCount; i++)
+            for (int i = 0; i < proto.OneofDecl.Count; i++)
             {
                 oneofs[i].fields = new FieldDescriptor[oneofs[i].FieldCount];
                 oneofs[i].fieldCount = 0;
             }
-            for (int i = 0; i< proto.FieldCount; i++)
+            for (int i = 0; i< proto.Field.Count; i++)
             {
                 OneofDescriptor oneofDescriptor = fields[i].ContainingOneof;
                 if (oneofDescriptor != null)
@@ -151,7 +151,7 @@ namespace Google.ProtocolBuffers.Descriptors
         /// </summary>
         public bool IsExtensionNumber(int number)
         {
-            foreach (DescriptorProto.Types.ExtensionRange range in Proto.ExtensionRangeList)
+            foreach (DescriptorProto.Types.ExtensionRange range in Proto.ExtensionRange)
             {
                 if (range.Start <= number && number < range.End)
                 {
@@ -244,7 +244,7 @@ namespace Google.ProtocolBuffers.Descriptors
             // If the type allows extensions, an extension with message type could contain
             // required fields, so we have to be conservative and assume such an
             // extension exists.
-            if (Proto.ExtensionRangeCount != 0)
+            if (Proto.ExtensionRange.Count != 0)
             {
                 return true;
             }
@@ -275,22 +275,22 @@ namespace Google.ProtocolBuffers.Descriptors
 
             for (int i = 0; i < nestedTypes.Count; i++)
             {
-                nestedTypes[i].ReplaceProto(newProto.GetNestedType(i));
+                nestedTypes[i].ReplaceProto(newProto.NestedType[i]);
             }
 
             for (int i = 0; i < enumTypes.Count; i++)
             {
-                enumTypes[i].ReplaceProto(newProto.GetEnumType(i));
+                enumTypes[i].ReplaceProto(newProto.EnumType[i]);
             }
 
             for (int i = 0; i < fields.Count; i++)
             {
-                fields[i].ReplaceProto(newProto.GetField(i));
+                fields[i].ReplaceProto(newProto.Field[i]);
             }
 
             for (int i = 0; i < extensions.Count; i++)
             {
-                extensions[i].ReplaceProto(newProto.GetExtension(i));
+                extensions[i].ReplaceProto(newProto.Extension[i]);
             }
         }
     }

+ 2 - 2
csharp/src/ProtocolBuffers/Descriptors/MethodDescriptor.cs

@@ -29,9 +29,9 @@
 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Describes a single method in a service.

+ 2 - 2
csharp/src/ProtocolBuffers/Descriptors/OneofDescriptor.cs

@@ -31,9 +31,9 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     public sealed class OneofDescriptor
     {

+ 1 - 1
csharp/src/ProtocolBuffers/Descriptors/PackageDescriptor.cs

@@ -30,7 +30,7 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Represents a package in the symbol table.  We use PackageDescriptors

+ 4 - 4
csharp/src/ProtocolBuffers/Descriptors/ServiceDescriptor.cs

@@ -31,9 +31,9 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 using System;
 using System.Collections.Generic;
-using Google.ProtocolBuffers.DescriptorProtos;
+using Google.Protobuf.DescriptorProtos;
 
-namespace Google.ProtocolBuffers.Descriptors
+namespace Google.Protobuf.Descriptors
 {
     /// <summary>
     /// Describes a service type.
@@ -45,7 +45,7 @@ namespace Google.ProtocolBuffers.Descriptors
         public ServiceDescriptor(ServiceDescriptorProto proto, FileDescriptor file, int index)
             : base(proto, file, ComputeFullName(file, null, proto.Name), index)
         {
-            methods = DescriptorUtil.ConvertAndMakeReadOnly(proto.MethodList,
+            methods = DescriptorUtil.ConvertAndMakeReadOnly(proto.Method,
                                                             (method, i) => new MethodDescriptor(method, file, this, i));
 
             file.DescriptorPool.AddSymbol(this);
@@ -82,7 +82,7 @@ namespace Google.ProtocolBuffers.Descriptors
             base.ReplaceProto(newProto);
             for (int i = 0; i < methods.Count; i++)
             {
-                methods[i].ReplaceProto(newProto.GetMethod(i));
+                methods[i].ReplaceProto(newProto.Method[i]);
             }
         }
     }

+ 0 - 624
csharp/src/ProtocolBuffers/DynamicMessage.cs

@@ -1,624 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using Google.ProtocolBuffers.Descriptors;
-
-namespace Google.ProtocolBuffers
-{
-    /// <summary>
-    /// An implementation of IMessage that can represent arbitrary types, given a MessageaDescriptor.
-    /// </summary>
-    public sealed partial class DynamicMessage : AbstractMessage<DynamicMessage, DynamicMessage.Builder>
-    {
-        private readonly MessageDescriptor type;
-        private readonly FieldSet fields;
-        private readonly FieldDescriptor[] oneofCase;
-        private readonly UnknownFieldSet unknownFields;
-        private int memoizedSize = -1;
-
-        /// <summary>
-        /// Creates a DynamicMessage with the given FieldSet.
-        /// </summary>
-        /// <param name="type"></param>
-        /// <param name="fields"></param>
-        /// <param name="unknownFields"></param>
-        private DynamicMessage(MessageDescriptor type, FieldSet fields,
-            FieldDescriptor[] oneofCase, UnknownFieldSet unknownFields)
-        {
-            this.type = type;
-            this.fields = fields;
-            this.oneofCase = oneofCase;
-            this.unknownFields = unknownFields;
-        }
-
-        /// <summary>
-        /// Returns a DynamicMessage representing the default instance of the given type.
-        /// </summary>
-        /// <param name="type"></param>
-        /// <returns></returns>
-        public static DynamicMessage GetDefaultInstance(MessageDescriptor type)
-        {
-            int oneofDescriptorCount = type.Proto.OneofDeclCount;
-            FieldDescriptor[] oneofCase = new FieldDescriptor[oneofDescriptorCount];
-            return new DynamicMessage(type, FieldSet.DefaultInstance, oneofCase, UnknownFieldSet.DefaultInstance);
-        }
-
-        /// <summary>
-        /// Parses a message of the given type from the given stream.
-        /// </summary>
-        public static DynamicMessage ParseFrom(MessageDescriptor type, ICodedInputStream input)
-        {
-            Builder builder = CreateBuilder(type);
-            Builder dynamicBuilder = builder.MergeFrom(input);
-            return dynamicBuilder.BuildParsed();
-        }
-
-        /// <summary>
-        /// Parse a message of the given type from the given stream and extension registry.
-        /// </summary>
-        /// <param name="type"></param>
-        /// <param name="input"></param>
-        /// <param name="extensionRegistry"></param>
-        /// <returns></returns>
-        public static DynamicMessage ParseFrom(MessageDescriptor type, ICodedInputStream input,
-                                               ExtensionRegistry extensionRegistry)
-        {
-            Builder builder = CreateBuilder(type);
-            Builder dynamicBuilder = builder.MergeFrom(input, extensionRegistry);
-            return dynamicBuilder.BuildParsed();
-        }
-
-        /// <summary>
-        /// Parses a message of the given type from the given stream.
-        /// </summary>
-        public static DynamicMessage ParseFrom(MessageDescriptor type, Stream input)
-        {
-            Builder builder = CreateBuilder(type);
-            Builder dynamicBuilder = builder.MergeFrom(input);
-            return dynamicBuilder.BuildParsed();
-        }
-
-        /// <summary>
-        /// Parse a message of the given type from the given stream and extension registry.
-        /// </summary>
-        /// <param name="type"></param>
-        /// <param name="input"></param>
-        /// <param name="extensionRegistry"></param>
-        /// <returns></returns>
-        public static DynamicMessage ParseFrom(MessageDescriptor type, Stream input, ExtensionRegistry extensionRegistry)
-        {
-            Builder builder = CreateBuilder(type);
-            Builder dynamicBuilder = builder.MergeFrom(input, extensionRegistry);
-            return dynamicBuilder.BuildParsed();
-        }
-
-        /// <summary>
-        /// Parse <paramref name="data"/> as a message of the given type and return it.
-        /// </summary>
-        public static DynamicMessage ParseFrom(MessageDescriptor type, ByteString data)
-        {
-            Builder builder = CreateBuilder(type);
-            Builder dynamicBuilder = builder.MergeFrom(data);
-            return dynamicBuilder.BuildParsed();
-        }
-
-        /// <summary>
-        /// Parse <paramref name="data"/> as a message of the given type and return it.
-        /// </summary>
-        public static DynamicMessage ParseFrom(MessageDescriptor type, ByteString data,
-                                               ExtensionRegistry extensionRegistry)
-        {
-            Builder builder = CreateBuilder(type);
-            Builder dynamicBuilder = builder.MergeFrom(data, extensionRegistry);
-            return dynamicBuilder.BuildParsed();
-        }
-
-        /// <summary>
-        /// Parse <paramref name="data"/> as a message of the given type and return it.
-        /// </summary>
-        public static DynamicMessage ParseFrom(MessageDescriptor type, byte[] data)
-        {
-            Builder builder = CreateBuilder(type);
-            Builder dynamicBuilder = builder.MergeFrom(data);
-            return dynamicBuilder.BuildParsed();
-        }
-
-        /// <summary>
-        /// Parse <paramref name="data"/> as a message of the given type and return it.
-        /// </summary>
-        public static DynamicMessage ParseFrom(MessageDescriptor type, byte[] data, ExtensionRegistry extensionRegistry)
-        {
-            Builder builder = CreateBuilder(type);
-            Builder dynamicBuilder = builder.MergeFrom(data, extensionRegistry);
-            return dynamicBuilder.BuildParsed();
-        }
-
-        /// <summary>
-        /// Constructs a builder for the given type.
-        /// </summary>
-        public static Builder CreateBuilder(MessageDescriptor type)
-        {
-            return new Builder(type);
-        }
-
-        /// <summary>
-        /// Constructs a builder for a message of the same type as <paramref name="prototype"/>,
-        /// and initializes it with the same contents.
-        /// </summary>
-        /// <param name="prototype"></param>
-        /// <returns></returns>
-        public static Builder CreateBuilder(IMessage prototype)
-        {
-            return new Builder(prototype.DescriptorForType).MergeFrom(prototype);
-        }
-
-        // -----------------------------------------------------------------
-        // Implementation of IMessage interface.
-
-        public override MessageDescriptor DescriptorForType
-        {
-            get { return type; }
-        }
-
-        public override DynamicMessage DefaultInstanceForType
-        {
-            get { return GetDefaultInstance(type); }
-        }
-
-        public override IDictionary<FieldDescriptor, object> AllFields
-        {
-            get { return fields.AllFieldDescriptors; }
-        }
-
-        public override bool HasOneof(OneofDescriptor oneof)
-        {
-            VerifyContainingOneofType(oneof);
-            FieldDescriptor field = oneofCase[oneof.Index];
-            if (field == null)
-            {
-                return false;
-            }
-            return true;
-        }
-
-        public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
-        {
-            VerifyContainingOneofType(oneof);
-            return oneofCase[oneof.Index];
-        }
-
-        public override bool HasField(FieldDescriptor field)
-        {
-            VerifyContainingType(field);
-            return fields.HasField(field);
-        }
-
-        public override object this[FieldDescriptor field]
-        {
-            get
-            {
-                VerifyContainingType(field);
-                object result = fields[field];
-                if (result == null)
-                {
-                    result = GetDefaultInstance(field.MessageType);
-                }
-                return result;
-            }
-        }
-
-        public override int GetRepeatedFieldCount(FieldDescriptor field)
-        {
-            VerifyContainingType(field);
-            return fields.GetRepeatedFieldCount(field);
-        }
-
-        public override object this[FieldDescriptor field, int index]
-        {
-            get
-            {
-                VerifyContainingType(field);
-                return fields[field, index];
-            }
-        }
-
-        public override UnknownFieldSet UnknownFields
-        {
-            get { return unknownFields; }
-        }
-
-        public bool Initialized
-        {
-            get { return fields.IsInitializedWithRespectTo(type.Fields); }
-        }
-
-        public override void WriteTo(ICodedOutputStream output)
-        {
-            fields.WriteTo(output);
-            if (type.Options.MessageSetWireFormat)
-            {
-                unknownFields.WriteAsMessageSetTo(output);
-            }
-            else
-            {
-                unknownFields.WriteTo(output);
-            }
-        }
-
-        public override int SerializedSize
-        {
-            get
-            {
-                int size = memoizedSize;
-                if (size != -1)
-                {
-                    return size;
-                }
-
-                size = fields.SerializedSize;
-                if (type.Options.MessageSetWireFormat)
-                {
-                    size += unknownFields.SerializedSizeAsMessageSet;
-                }
-                else
-                {
-                    size += unknownFields.SerializedSize;
-                }
-
-                memoizedSize = size;
-                return size;
-            }
-        }
-
-        public override Builder CreateBuilderForType()
-        {
-            return new Builder(type);
-        }
-
-        public override Builder ToBuilder()
-        {
-            return CreateBuilderForType().MergeFrom(this);
-        }
-
-        /// <summary>
-        /// Verifies that the field is a field of this message.
-        /// </summary>
-        private void VerifyContainingType(FieldDescriptor field)
-        {
-            if (field.ContainingType != type)
-            {
-                throw new ArgumentException("FieldDescriptor does not match message type.");
-            }
-        }
-
-        /// <summary>
-        /// Verifies that the oneof is an oneof of this message.
-        /// </summary>
-        private void VerifyContainingOneofType(OneofDescriptor oneof)
-        {
-            if (oneof.ContainingType != type)
-            {
-                throw new ArgumentException("OneofDescritpor does not match message type");
-            }
-        }
-
-        /// <summary>
-        /// Builder for dynamic messages. Instances are created with DynamicMessage.CreateBuilder.
-        /// </summary>
-        public sealed partial class Builder : AbstractBuilder<DynamicMessage, Builder>
-        {
-            private readonly MessageDescriptor type;
-            private FieldSet fields;
-            private FieldDescriptor[] oneofCase;
-            private UnknownFieldSet unknownFields;
-
-            internal Builder(MessageDescriptor type)
-            {
-                this.type = type;
-                this.fields = FieldSet.CreateInstance();
-                this.unknownFields = UnknownFieldSet.DefaultInstance;
-                this.oneofCase = new FieldDescriptor[type.Proto.OneofDeclCount];
-            }
-
-            protected override Builder ThisBuilder
-            {
-                get { return this; }
-            }
-
-            public override Builder Clear()
-            {
-                fields.Clear();
-                return this;
-            }
-
-            public override Builder MergeFrom(IMessage other)
-            {
-                if (other.DescriptorForType != type)
-                {
-                    throw new ArgumentException("MergeFrom(IMessage) can only merge messages of the same type.");
-                }
-                fields.MergeFrom(other);
-                MergeUnknownFields(other.UnknownFields);
-                for (int i = 0; i < oneofCase.Length; i++)
-                {
-                    if (other.HasOneof(type.Oneofs[i]))
-                    {
-                        if (oneofCase[i] == null)
-                        {
-                            oneofCase[i] = other.OneofFieldDescriptor(type.Oneofs[i]);
-                        } else
-                        {
-                            if (oneofCase[i] != other.OneofFieldDescriptor(type.Oneofs[i]))
-                            {
-                                fields.ClearField(oneofCase[i]);
-                                oneofCase[i] = other.OneofFieldDescriptor(type.Oneofs[i]);
-                            }
-                        }
-                    }
-                }
-                return this;
-            }
-
-            public override Builder MergeFrom(DynamicMessage other)
-            {
-                IMessage downcast = other;
-                return MergeFrom(downcast);
-            }
-
-            public override DynamicMessage Build()
-            {
-                if (fields != null && !IsInitialized)
-                {
-                    throw new UninitializedMessageException(new DynamicMessage(type, fields, oneofCase, unknownFields));
-                }
-                return BuildPartial();
-            }
-
-            /// <summary>
-            /// Helper for DynamicMessage.ParseFrom() methods to call. Throws
-            /// InvalidProtocolBufferException 
-            /// </summary>
-            /// <returns></returns>
-            internal DynamicMessage BuildParsed()
-            {
-                if (!IsInitialized)
-                {
-                    throw new UninitializedMessageException(new DynamicMessage(type, fields, oneofCase, unknownFields)).
-                        AsInvalidProtocolBufferException();
-                }
-                return BuildPartial();
-            }
-
-            public override DynamicMessage BuildPartial()
-            {
-                if (fields == null)
-                {
-                    throw new InvalidOperationException("Build() has already been called on this Builder.");
-                }
-                fields.MakeImmutable();
-                DynamicMessage result = new DynamicMessage(type, fields, oneofCase, unknownFields);
-                fields = null;
-                unknownFields = null;
-                return result;
-            }
-
-            public override Builder Clone()
-            {
-                Builder result = new Builder(type);
-                result.fields.MergeFrom(fields);
-                result.oneofCase = oneofCase;
-                return result;
-            }
-
-            public override bool IsInitialized
-            {
-                get { return fields.IsInitializedWithRespectTo(type.Fields); }
-            }
-
-            public override Builder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry)
-            {
-                UnknownFieldSet.Builder unknownFieldsBuilder = UnknownFieldSet.CreateBuilder(unknownFields);
-                unknownFieldsBuilder.MergeFrom(input, extensionRegistry, this);
-                unknownFields = unknownFieldsBuilder.Build();
-                return this;
-            }
-
-            public override MessageDescriptor DescriptorForType
-            {
-                get { return type; }
-            }
-
-            public override DynamicMessage DefaultInstanceForType
-            {
-                get { return GetDefaultInstance(type); }
-            }
-
-            public override IDictionary<FieldDescriptor, object> AllFields
-            {
-                get { return fields.AllFieldDescriptors; }
-            }
-
-            public override IBuilder CreateBuilderForField(FieldDescriptor field)
-            {
-                VerifyContainingType(field);
-                if (field.MappedType != MappedType.Message)
-                {
-                    throw new ArgumentException("CreateBuilderForField is only valid for fields with message type.");
-                }
-                return new Builder(field.MessageType);
-            }
-
-            public override bool HasOneof(OneofDescriptor oneof)
-            {
-                VerifyContainingOneofType(oneof);
-                FieldDescriptor field = oneofCase[oneof.Index];
-                if (field == null)
-                {
-                    return false;
-                }
-                return true;
-            }
-
-            public override FieldDescriptor OneofFieldDescriptor(OneofDescriptor oneof)
-            {
-                VerifyContainingOneofType(oneof);
-                return oneofCase[oneof.Index];
-            }
-
-            public override bool HasField(FieldDescriptor field)
-            {
-                VerifyContainingType(field);
-                return fields.HasField(field);
-            }
-
-            public override object this[FieldDescriptor field, int index]
-            {
-                get
-                {
-                    VerifyContainingType(field);
-                    return fields[field, index];
-                }
-                set
-                {
-                    VerifyContainingType(field);
-                    fields[field, index] = value;
-                }
-            }
-
-            public override object this[FieldDescriptor field]
-            {
-                get
-                {
-                    VerifyContainingType(field);
-                    object result = fields[field];
-                    if (result == null)
-                    {
-                        result = GetDefaultInstance(field.MessageType);
-                    }
-                    return result;
-                }
-                set
-                {
-                    VerifyContainingType(field);
-                    OneofDescriptor oneof = field.ContainingOneof;
-                    if (oneof != null)
-                    {
-                        int index = oneof.Index;
-                        FieldDescriptor oldField = oneofCase[index];
-                        if ((oldField != null) && (oldField != field))
-                        {
-                            fields.ClearField(oldField);
-                        }
-                        oneofCase[index] = field;
-                    }
-                    fields[field] = value;
-                }
-            }
-
-            public override Builder ClearField(FieldDescriptor field)
-            {
-                VerifyContainingType(field);
-                OneofDescriptor oneof = field.ContainingOneof;
-                if (oneof != null)
-                {
-                    int index = oneof.Index;
-                    if (oneofCase[index] == field)
-                    {
-                        oneofCase[index] = null;
-                    }
-                }
-                fields.ClearField(field);
-                return this;
-            }
-
-            public override Builder ClearOneof(OneofDescriptor oneof)
-            {
-                VerifyContainingOneofType(oneof);
-                FieldDescriptor field = oneofCase[oneof.Index];
-                if (field != null)
-                {
-                    ClearField(field);
-                }
-                return this;
-            }
-
-            public override int GetRepeatedFieldCount(FieldDescriptor field)
-            {
-                VerifyContainingType(field);
-                return fields.GetRepeatedFieldCount(field);
-            }
-
-            public override Builder AddRepeatedField(FieldDescriptor field, object value)
-            {
-                VerifyContainingType(field);
-                fields.AddRepeatedField(field, value);
-                return this;
-            }
-
-            public override UnknownFieldSet UnknownFields
-            {
-                get { return unknownFields; }
-                set { unknownFields = value; }
-            }
-
-            /// <summary>
-            /// Verifies that the field is a field of this message.
-            /// </summary>
-            /// <param name="field"></param>
-            private void VerifyContainingType(FieldDescriptor field)
-            {
-                if (field.ContainingType != type)
-                {
-                    throw new ArgumentException("FieldDescriptor does not match message type.");
-                }
-            }
-
-            /// <summary>
-            /// Verifies that the oneof is an oneof of this message.
-            /// </summary>
-            private void VerifyContainingOneofType(OneofDescriptor oneof)
-            {
-                if (oneof.ContainingType != type)
-                {
-                    throw new ArgumentException("OneofDescriptor does not match message type");
-                }
-            }
-        }
-    }
-}

+ 85 - 0
csharp/src/ProtocolBuffers/EnumHelper.cs

@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Google.Protobuf
+{
+    public class EnumHelper<T> where T : struct, IComparable, IFormattable
+    {
+        // TODO(jonskeet): For snmall enums, use something lighter-weight than a dictionary?
+        private static readonly Dictionary<int, T> _byNumber;
+        private static readonly Dictionary<string, T> _byName;
+
+        private const long UnknownValueBase = 0x100000000L;
+
+        static EnumHelper()
+        {
+            if (!typeof(T).IsEnum)
+            {
+                throw new InvalidOperationException(string.Format("{0} is not an enum type", typeof(T).FullName));
+            }
+            if (Enum.GetUnderlyingType(typeof(T)) != typeof(long))
+            {
+                throw new InvalidOperationException(string.Format("{0} does not have long as an underlying type", typeof(T).FullName));
+            }
+            // It will actually be a T[], but the CLR will let us convert.
+            long[] array = (long[])Enum.GetValues(typeof(T));
+            _byNumber = new Dictionary<int, T>(array.Length);
+            foreach (long i in array)
+            {
+                _byNumber[(int) i] = (T)(object)i;
+            }
+            string[] names = (string[])Enum.GetNames(typeof(T));
+            _byName = new Dictionary<string, T>();
+            foreach (var name in names)
+            {
+                _byName[name] = (T) Enum.Parse(typeof(T), name, false);
+            }
+        }
+
+        /// <summary>
+        /// Converts the given 32-bit integer into a value of the enum type.
+        /// If the integer is a known, named value, that is returned; otherwise,
+        /// a value which is outside the range of 32-bit integers but which preserves
+        /// the original integer is returned.
+        /// </summary>
+        public static T FromInt32(int value)
+        {
+            T validValue;
+            return _byNumber.TryGetValue(value, out validValue) ? validValue : FromRawValue((long) value | UnknownValueBase);
+        }
+
+        /// <summary>
+        /// Converts a value of the enum type to a 32-bit integer. This reverses
+        /// <see cref="Int32"/>.
+        /// </summary>
+        public static int ToInt32(T value)
+        {
+            return (int)GetRawValue(value);
+        }
+
+        public static bool IsKnownValue(T value)
+        {
+            long raw = GetRawValue(value);
+            if (raw >= int.MinValue && raw <= int.MaxValue)
+            {
+                return _byNumber.ContainsKey((int)raw);
+            }
+            return false;
+        }
+
+        private static long GetRawValue(T value)
+        {
+            // TODO(jonskeet): Try using expression trees to get rid of the boxing here.
+            return (long)(object)value;
+        }
+
+        private static T FromRawValue(long value)
+        {
+            // TODO(jonskeet): Try using expression trees to get rid of the boxing here.
+            return (T)(object)value;
+        }
+
+    }
+}

+ 0 - 234
csharp/src/ProtocolBuffers/EnumLite.cs

@@ -1,234 +0,0 @@
-#region Copyright notice and license
-
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://github.com/jskeet/dotnet-protobufs/
-// Original C++/Java/Python code:
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#endregion
-
-using System;
-using System.Collections.Generic;
-
-namespace Google.ProtocolBuffers
-{
-    ///<summary>
-    ///Interface for an enum value or value descriptor, to be used in FieldSet.
-    ///The lite library stores enum values directly in FieldSets but the full
-    ///library stores EnumValueDescriptors in order to better support reflection.
-    ///</summary>
-    public interface IEnumLite
-    {
-        int Number { get; }
-        string Name { get; }
-    }
-
-    ///<summary>
-    ///Interface for an object which maps integers to {@link EnumLite}s.
-    ///{@link Descriptors.EnumDescriptor} implements this interface by mapping
-    ///numbers to {@link Descriptors.EnumValueDescriptor}s.  Additionally,
-    ///every generated enum type has a static method internalGetValueMap() which
-    ///returns an implementation of this type that maps numbers to enum values.
-    ///</summary>
-    public interface IEnumLiteMap<T> : IEnumLiteMap
-        where T : IEnumLite
-    {
-        new T FindValueByNumber(int number);
-    }
-
-    public interface IEnumLiteMap
-    {
-        bool IsValidValue(IEnumLite value);
-        IEnumLite FindValueByNumber(int number);
-        IEnumLite FindValueByName(string name);
-    }
-
-    public class EnumLiteMap<TEnum> : IEnumLiteMap<IEnumLite>
-        where TEnum : struct, IComparable, IFormattable
-    {
-        private struct EnumValue : IEnumLite
-        {
-            private readonly TEnum value;
-
-            public EnumValue(TEnum value)
-            {
-                this.value = value;
-            }
-
-            int IEnumLite.Number
-            {
-                get { return Convert.ToInt32(value); }
-            }
-
-            string IEnumLite.Name
-            {
-                get { return value.ToString(); }
-            }
-        }
-
-        public IEnumLite FindValueByNumber(int number)
-        {
-            TEnum val = default(TEnum);
-            if (EnumParser<TEnum>.TryConvert(number, ref val))
-            {
-                return new EnumValue(val);
-            }
-            return null;
-        }
-
-        public IEnumLite FindValueByName(string name)
-        {
-            TEnum val = default(TEnum);
-            if (EnumParser<TEnum>.TryConvert(name, ref val))
-            {
-                return new EnumValue(val);
-            }
-            return null;
-        }
-
-        public bool IsValidValue(IEnumLite value)
-        {
-            TEnum val = default(TEnum);
-            return EnumParser<TEnum>.TryConvert(value.Number, ref val);
-        }
-    }
-
-    public static class EnumParser<T> where T : struct, IComparable, IFormattable
-    {
-        private static readonly Dictionary<int, T> _byNumber;
-        private static Dictionary<string, T> _byName;
-
-        static EnumParser()
-        {
-            int[] array;
-            try
-            {
-#if CLIENTPROFILE
-                // It will actually be a T[], but the CLR will let us convert.
-                array = (int[])Enum.GetValues(typeof(T));
-#else
-                var temp = new List<T>();
-                foreach (var fld in typeof (T).GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static))
-                {
-                    if (fld.IsLiteral && fld.FieldType == typeof(T))
-                    {
-                        temp.Add((T)fld.GetValue(null));
-                    }
-                }
-                array = (int[])(object)temp.ToArray();
-#endif
-            }
-            catch
-            {
-                _byNumber = null;
-                return;
-            }
-
-            _byNumber = new Dictionary<int, T>(array.Length);
-            foreach (int i in array)
-            {
-                _byNumber[i] = (T)(object)i;
-            }
-        }
-
-        public static bool TryConvert(object input, ref T value)
-        {
-            if (input is int || input is T)
-            {
-                return TryConvert((int)input, ref value);
-            }
-            if (input is string)
-            {
-                return TryConvert((string)input, ref value);
-            }
-            return false;
-        }
-
-        /// <summary>
-        /// Tries to convert an integer to its enum representation. This would take an out parameter,
-        /// but the caller uses ref, so this approach is simpler.
-        /// </summary>
-        public static bool TryConvert(int number, ref T value)
-        {
-            // null indicates an exception at construction, use native IsDefined.
-            if (_byNumber == null)
-            {
-                return Enum.IsDefined(typeof(T), number);
-            }
-            T converted;
-            if (_byNumber != null && _byNumber.TryGetValue(number, out converted))
-            {
-                value = converted;
-                return true;
-            }
-
-            return false;
-        }
-
-        /// <summary>
-        /// Tries to convert a string to its enum representation. This would take an out parameter,
-        /// but the caller uses ref, so this approach is simpler.
-        /// </summary>
-        public static bool TryConvert(string name, ref T value)
-        {
-            // null indicates an exception at construction, use native IsDefined/Parse.
-            if (_byNumber == null)
-            {
-                if (Enum.IsDefined(typeof(T), name))
-                {
-                    value = (T)Enum.Parse(typeof(T), name, false);
-                    return true;
-                }
-                return false;
-            }
-
-            // known race, possible multiple threads each build their own copy; however, last writer will win
-            var map = _byName;
-            if (map == null)
-            {
-                map = new Dictionary<string, T>(StringComparer.Ordinal);
-                foreach (var possible in _byNumber.Values)
-                {
-                    map[possible.ToString()] = possible;
-                }
-                _byName = map;
-            }
-
-            T converted;
-            if (map.TryGetValue(name, out converted))
-            {
-                value = converted;
-                return true;
-            }
-
-            return false;
-        }
-    }
-}

Некоторые файлы не были показаны из-за большого количества измененных файлов