You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by an...@apache.org on 2017/05/26 17:11:07 UTC

[1/9] mesos git commit: Update vendored protobuf tar.gz to 3.3.0.

Repository: mesos
Updated Branches:
  refs/heads/master efb774cd9 -> 7b9863faf


Update vendored protobuf tar.gz to 3.3.0.

The content of `3rdparty/protobuf-3.3.0.tar.gz` is generated by:
- On a Mac OS, download and untar protobuf v3.3.0 source at
  https://github.com/google/protobuf/archive/v3.3.0.tar.gz;
- Run `./autogen.sh`;
- Recompress and tar by `tar -czvf`.

Review: https://reviews.apache.org/r/58358

This is submitted because reviewboard does not work well with
binary patch. See above review for other changes.

This closes #214


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/114599e5
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/114599e5
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/114599e5

Branch: refs/heads/master
Commit: 114599e5f624b8104aadc2ea53d3f54bccc7ca5f
Parents: efb774c
Author: Zhitao Li <zh...@uber.com>
Authored: Fri May 26 09:37:45 2017 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Fri May 26 09:37:45 2017 -0700

----------------------------------------------------------------------
 3rdparty/protobuf-2.6.1.tar.gz | Bin 2641426 -> 0 bytes
 3rdparty/protobuf-3.3.0.tar.gz | Bin 0 -> 7050431 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/114599e5/3rdparty/protobuf-2.6.1.tar.gz
----------------------------------------------------------------------
diff --git a/3rdparty/protobuf-2.6.1.tar.gz b/3rdparty/protobuf-2.6.1.tar.gz
deleted file mode 100644
index e1c2d54..0000000
Binary files a/3rdparty/protobuf-2.6.1.tar.gz and /dev/null differ

http://git-wip-us.apache.org/repos/asf/mesos/blob/114599e5/3rdparty/protobuf-3.3.0.tar.gz
----------------------------------------------------------------------
diff --git a/3rdparty/protobuf-3.3.0.tar.gz b/3rdparty/protobuf-3.3.0.tar.gz
new file mode 100644
index 0000000..98fbec8
Binary files /dev/null and b/3rdparty/protobuf-3.3.0.tar.gz differ


[3/9] mesos git commit: Update 3rdparty build to support protobuf 3.3.0.

Posted by an...@apache.org.
Update 3rdparty build to support protobuf 3.3.0.

Review: https://reviews.apache.org/r/58515/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/edbdb030
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/edbdb030
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/edbdb030

Branch: refs/heads/master
Commit: edbdb030312097110f3c7a278bdf596a41a2c38b
Parents: f680ff2
Author: Zhitao Li <zh...@gmail.com>
Authored: Fri May 26 09:59:08 2017 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Fri May 26 09:59:08 2017 -0700

----------------------------------------------------------------------
 3rdparty/cmake/Versions.cmake | 4 ++--
 3rdparty/versions.am          | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/edbdb030/3rdparty/cmake/Versions.cmake
----------------------------------------------------------------------
diff --git a/3rdparty/cmake/Versions.cmake b/3rdparty/cmake/Versions.cmake
index a7a1340..8a0537b 100644
--- a/3rdparty/cmake/Versions.cmake
+++ b/3rdparty/cmake/Versions.cmake
@@ -28,8 +28,8 @@ set(ZLIB_HASH           "SHA256=36658CB768A54C1D4DEC43C3116C27ED893E88B02ECFCB44
 if (NOT WIN32)
   set(GLOG_VERSION      "0.3.3")
   set(GLOG_HASH         "SHA256=FBF90C2285BA0561DB7A40F8A4EEFB9AA963E7D399BD450363E959929FE849D0")
-  set(PROTOBUF_VERSION  "2.6.1")
-  set(PROTOBUF_HASH     "SHA256=DBBD7BDD2381633995404DE65A945FF1A7610B0DA14593051B4738C90C6DD164")
+  set(PROTOBUF_VERSION  "3.3.0")
+  set(PROTOBUF_HASH     "SHA256=E43F47C51C4A838F737EE2DA2F183F129EE388272622C403179D5AD28C555F39")
   set(ZOOKEEPER_VERSION "3.4.8")
   set(ZOOKEEPER_HASH    "SHA256=F10A0B51F45C4F64C1FE69EF713ABF9EB9571BC7385A82DA892E83BB6C965E90")
 else (NOT WIN32)

http://git-wip-us.apache.org/repos/asf/mesos/blob/edbdb030/3rdparty/versions.am
----------------------------------------------------------------------
diff --git a/3rdparty/versions.am b/3rdparty/versions.am
index 55e170a..f46362c 100644
--- a/3rdparty/versions.am
+++ b/3rdparty/versions.am
@@ -30,7 +30,7 @@ LIBEV_VERSION = 4.22
 NVML_VERSION = 352.79
 PICOJSON_VERSION = 1.3.0
 PIP_VERSION = 7.1.2
-PROTOBUF_VERSION = 2.6.1
+PROTOBUF_VERSION = 3.3.0
 SETUPTOOLS_VERSION = 20.9.0
 WHEEL_VERSION = 0.24.0
 ZOOKEEPER_VERSION = 3.4.8


[6/9] mesos git commit: Update related tests in stout to support protobuf 3.3.0.

Posted by an...@apache.org.
Update related tests in stout to support protobuf 3.3.0.

Command to regenerate:
```
./build/3rdparty/protobuf-3.3.0//src/protoc \
  -I 3rdparty/stout/tests \
  --cpp_out=3rdparty/stout/tests/ \
  3rdparty/stout/tests/protobuf_tests.proto
```

Review: https://reviews.apache.org/r/58514/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/8eacd7c7
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/8eacd7c7
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/8eacd7c7

Branch: refs/heads/master
Commit: 8eacd7c7975af9613b4ed37442b7ad6966f0079e
Parents: edbdb03
Author: Zhitao Li <zh...@gmail.com>
Authored: Fri May 26 09:59:42 2017 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Fri May 26 09:59:42 2017 -0700

----------------------------------------------------------------------
 3rdparty/stout/README.md                  |    2 +-
 3rdparty/stout/tests/protobuf_tests.pb.cc | 3490 +++++++++++++++++-------
 3rdparty/stout/tests/protobuf_tests.pb.h  | 1465 +++++-----
 3 files changed, 3257 insertions(+), 1700 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/8eacd7c7/3rdparty/stout/README.md
----------------------------------------------------------------------
diff --git a/3rdparty/stout/README.md b/3rdparty/stout/README.md
index f4e41aa..2637f14 100644
--- a/3rdparty/stout/README.md
+++ b/3rdparty/stout/README.md
@@ -6,7 +6,7 @@ Stout is a header-only C++ library. Simply add the `include` folder to your incl
 >
 >  - Boost
 >  - Google's glog (this dependency will be removed in the future)
->  - Google's protobuf (version 2.6.1 is required to run tests)
+>  - Google's protobuf (version 3.3.0 is required to run tests)
 >  - Google's gmock/gtest
 
 There are a handful of data structures provided within the library (including some collections), as well as some namespaced and miscellaneous utilities. Also included are abstractions for [command line flags](#flags).


[9/9] mesos git commit: Updated LICENSE information for protobuf 3.3.0.

Posted by an...@apache.org.
Updated LICENSE information for protobuf 3.3.0.

Content copied from:
https://github.com/google/protobuf/blob/v3.3.0/LICENSE.

Review: https://reviews.apache.org/r/58361/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7b9863fa
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7b9863fa
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7b9863fa

Branch: refs/heads/master
Commit: 7b9863faf21ffa882b857d76c900fd76e36693ca
Parents: a03c22a
Author: Zhitao Li <zh...@gmail.com>
Authored: Fri May 26 10:02:07 2017 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Fri May 26 10:02:07 2017 -0700

----------------------------------------------------------------------
 LICENSE | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/7b9863fa/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
index 1b3e72c..86a58c7 100644
--- a/LICENSE
+++ b/LICENSE
@@ -461,12 +461,21 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 ======================================================================
-For protobuf-2.6.1
-(3rdparty/protobuf-2.6.1.tar.gz):
+For protobuf-3.3.0
+(3rdparty/protobuf-3.3.0.tar.gz):
 ======================================================================
 
-Copyright 2008, Google Inc.
-All rights reserved.
+This license applies to all parts of Protocol Buffers except the following:
+
+  - Atomicops support for generic gcc, located in
+    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
+    This file is copyrighted by Red Hat Inc.
+
+  - Atomicops support for AIX/POWER, located in
+    src/google/protobuf/stubs/atomicops_internals_power.h.
+    This file is copyrighted by Bloomberg Finance LP.
+
+Copyright 2014, Google Inc.  All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are


[4/9] mesos git commit: Update related tests in stout to support protobuf 3.3.0.

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/mesos/blob/8eacd7c7/3rdparty/stout/tests/protobuf_tests.pb.h
----------------------------------------------------------------------
diff --git a/3rdparty/stout/tests/protobuf_tests.pb.h b/3rdparty/stout/tests/protobuf_tests.pb.h
index 18870cd..2e4ffe1 100644
--- a/3rdparty/stout/tests/protobuf_tests.pb.h
+++ b/3rdparty/stout/tests/protobuf_tests.pb.h
@@ -8,36 +8,59 @@
 
 #include <google/protobuf/stubs/common.h>
 
-#if GOOGLE_PROTOBUF_VERSION < 2006000
+#if GOOGLE_PROTOBUF_VERSION < 3003000
 #error This file was generated by a newer version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please update
 #error your headers.
 #endif
-#if 2006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#if 3003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
 #error This file was generated by an older version of protoc which is
 #error incompatible with your Protocol Buffer headers.  Please
 #error regenerate this file with a newer version of protoc.
 #endif
 
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/arena.h>
+#include <google/protobuf/arenastring.h>
+#include <google/protobuf/generated_message_table_driven.h>
 #include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/metadata.h>
 #include <google/protobuf/message.h>
-#include <google/protobuf/repeated_field.h>
-#include <google/protobuf/extension_set.h>
+#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
+#include <google/protobuf/extension_set.h>  // IWYU pragma: export
 #include <google/protobuf/generated_enum_reflection.h>
 #include <google/protobuf/unknown_field_set.h>
 // @@protoc_insertion_point(includes)
+namespace tests {
+class ArrayMessage;
+class ArrayMessageDefaultTypeInternal;
+extern ArrayMessageDefaultTypeInternal _ArrayMessage_default_instance_;
+class Message;
+class MessageDefaultTypeInternal;
+extern MessageDefaultTypeInternal _Message_default_instance_;
+class Nested;
+class NestedDefaultTypeInternal;
+extern NestedDefaultTypeInternal _Nested_default_instance_;
+class SimpleMessage;
+class SimpleMessageDefaultTypeInternal;
+extern SimpleMessageDefaultTypeInternal _SimpleMessage_default_instance_;
+}  // namespace tests
 
 namespace tests {
 
+namespace protobuf_protobuf_5ftests_2eproto {
 // Internal implementation detail -- do not call these.
-void  protobuf_AddDesc_protobuf_5ftests_2eproto();
-void protobuf_AssignDesc_protobuf_5ftests_2eproto();
-void protobuf_ShutdownFile_protobuf_5ftests_2eproto();
-
-class Nested;
-class SimpleMessage;
-class Message;
-class ArrayMessage;
+struct TableStruct {
+  static const ::google::protobuf::internal::ParseTableField entries[];
+  static const ::google::protobuf::internal::AuxillaryParseTableField aux[];
+  static const ::google::protobuf::internal::ParseTable schema[];
+  static const ::google::protobuf::uint32 offsets[];
+  static void InitDefaultsImpl();
+  static void Shutdown();
+};
+void AddDescriptors();
+void InitDefaults();
+}  // namespace protobuf_protobuf_5ftests_2eproto
 
 enum Enum {
   ONE = 1,
@@ -60,7 +83,7 @@ inline bool Enum_Parse(
 }
 // ===================================================================
 
-class Nested : public ::google::protobuf::Message {
+class Nested : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:tests.Nested) */ {
  public:
   Nested();
   virtual ~Nested();
@@ -73,110 +96,135 @@ class Nested : public ::google::protobuf::Message {
   }
 
   inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
+    return _internal_metadata_.unknown_fields();
   }
 
   inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
+    return _internal_metadata_.mutable_unknown_fields();
   }
 
   static const ::google::protobuf::Descriptor* descriptor();
   static const Nested& default_instance();
 
+  static inline const Nested* internal_default_instance() {
+    return reinterpret_cast<const Nested*>(
+               &_Nested_default_instance_);
+  }
+  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
+    0;
+
   void Swap(Nested* other);
 
   // implements Message ----------------------------------------------
 
-  Nested* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
+  inline Nested* New() const PROTOBUF_FINAL { return New(NULL); }
+
+  Nested* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
+  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
+  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
   void CopyFrom(const Nested& from);
   void MergeFrom(const Nested& from);
-  void Clear();
-  bool IsInitialized() const;
+  void Clear() PROTOBUF_FINAL;
+  bool IsInitialized() const PROTOBUF_FINAL;
 
-  int ByteSize() const;
+  size_t ByteSizeLong() const PROTOBUF_FINAL;
   bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
+      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
   void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
+      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
+  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
   private:
   void SharedCtor();
   void SharedDtor();
-  void SetCachedSize(int size) const;
+  void SetCachedSize(int size) const PROTOBUF_FINAL;
+  void InternalSwap(Nested* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
   public:
-  ::google::protobuf::Metadata GetMetadata() const;
+
+  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;
 
   // nested types ----------------------------------------------------
 
   // accessors -------------------------------------------------------
 
+  // repeated string repeated_str = 3;
+  int repeated_str_size() const;
+  void clear_repeated_str();
+  static const int kRepeatedStrFieldNumber = 3;
+  const ::std::string& repeated_str(int index) const;
+  ::std::string* mutable_repeated_str(int index);
+  void set_repeated_str(int index, const ::std::string& value);
+  #if LANG_CXX11
+  void set_repeated_str(int index, ::std::string&& value);
+  #endif
+  void set_repeated_str(int index, const char* value);
+  void set_repeated_str(int index, const char* value, size_t size);
+  ::std::string* add_repeated_str();
+  void add_repeated_str(const ::std::string& value);
+  #if LANG_CXX11
+  void add_repeated_str(::std::string&& value);
+  #endif
+  void add_repeated_str(const char* value);
+  void add_repeated_str(const char* value, size_t size);
+  const ::google::protobuf::RepeatedPtrField< ::std::string>& repeated_str() const;
+  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_repeated_str();
+
   // required string str = 1;
-  inline bool has_str() const;
-  inline void clear_str();
+  bool has_str() const;
+  void clear_str();
   static const int kStrFieldNumber = 1;
-  inline const ::std::string& str() const;
-  inline void set_str(const ::std::string& value);
-  inline void set_str(const char* value);
-  inline void set_str(const char* value, size_t size);
-  inline ::std::string* mutable_str();
-  inline ::std::string* release_str();
-  inline void set_allocated_str(::std::string* str);
+  const ::std::string& str() const;
+  void set_str(const ::std::string& value);
+  #if LANG_CXX11
+  void set_str(::std::string&& value);
+  #endif
+  void set_str(const char* value);
+  void set_str(const char* value, size_t size);
+  ::std::string* mutable_str();
+  ::std::string* release_str();
+  void set_allocated_str(::std::string* str);
 
   // optional string optional_str = 2;
-  inline bool has_optional_str() const;
-  inline void clear_optional_str();
+  bool has_optional_str() const;
+  void clear_optional_str();
   static const int kOptionalStrFieldNumber = 2;
-  inline const ::std::string& optional_str() const;
-  inline void set_optional_str(const ::std::string& value);
-  inline void set_optional_str(const char* value);
-  inline void set_optional_str(const char* value, size_t size);
-  inline ::std::string* mutable_optional_str();
-  inline ::std::string* release_optional_str();
-  inline void set_allocated_optional_str(::std::string* optional_str);
-
-  // repeated string repeated_str = 3;
-  inline int repeated_str_size() const;
-  inline void clear_repeated_str();
-  static const int kRepeatedStrFieldNumber = 3;
-  inline const ::std::string& repeated_str(int index) const;
-  inline ::std::string* mutable_repeated_str(int index);
-  inline void set_repeated_str(int index, const ::std::string& value);
-  inline void set_repeated_str(int index, const char* value);
-  inline void set_repeated_str(int index, const char* value, size_t size);
-  inline ::std::string* add_repeated_str();
-  inline void add_repeated_str(const ::std::string& value);
-  inline void add_repeated_str(const char* value);
-  inline void add_repeated_str(const char* value, size_t size);
-  inline const ::google::protobuf::RepeatedPtrField< ::std::string>& repeated_str() const;
-  inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_repeated_str();
+  const ::std::string& optional_str() const;
+  void set_optional_str(const ::std::string& value);
+  #if LANG_CXX11
+  void set_optional_str(::std::string&& value);
+  #endif
+  void set_optional_str(const char* value);
+  void set_optional_str(const char* value, size_t size);
+  ::std::string* mutable_optional_str();
+  ::std::string* release_optional_str();
+  void set_allocated_optional_str(::std::string* optional_str);
 
   // @@protoc_insertion_point(class_scope:tests.Nested)
  private:
-  inline void set_has_str();
-  inline void clear_has_str();
-  inline void set_has_optional_str();
-  inline void clear_has_optional_str();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  void set_has_str();
+  void clear_has_str();
+  void set_has_optional_str();
+  void clear_has_optional_str();
 
-  ::google::protobuf::uint32 _has_bits_[1];
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::HasBits<1> _has_bits_;
   mutable int _cached_size_;
-  ::std::string* str_;
-  ::std::string* optional_str_;
   ::google::protobuf::RepeatedPtrField< ::std::string> repeated_str_;
-  friend void  protobuf_AddDesc_protobuf_5ftests_2eproto();
-  friend void protobuf_AssignDesc_protobuf_5ftests_2eproto();
-  friend void protobuf_ShutdownFile_protobuf_5ftests_2eproto();
-
-  void InitAsDefaultInstance();
-  static Nested* default_instance_;
+  ::google::protobuf::internal::ArenaStringPtr str_;
+  ::google::protobuf::internal::ArenaStringPtr optional_str_;
+  friend struct protobuf_protobuf_5ftests_2eproto::TableStruct;
 };
 // -------------------------------------------------------------------
 
-class SimpleMessage : public ::google::protobuf::Message {
+class SimpleMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:tests.SimpleMessage) */ {
  public:
   SimpleMessage();
   virtual ~SimpleMessage();
@@ -189,91 +237,107 @@ class SimpleMessage : public ::google::protobuf::Message {
   }
 
   inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
+    return _internal_metadata_.unknown_fields();
   }
 
   inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
+    return _internal_metadata_.mutable_unknown_fields();
   }
 
   static const ::google::protobuf::Descriptor* descriptor();
   static const SimpleMessage& default_instance();
 
+  static inline const SimpleMessage* internal_default_instance() {
+    return reinterpret_cast<const SimpleMessage*>(
+               &_SimpleMessage_default_instance_);
+  }
+  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
+    1;
+
   void Swap(SimpleMessage* other);
 
   // implements Message ----------------------------------------------
 
-  SimpleMessage* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
+  inline SimpleMessage* New() const PROTOBUF_FINAL { return New(NULL); }
+
+  SimpleMessage* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
+  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
+  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
   void CopyFrom(const SimpleMessage& from);
   void MergeFrom(const SimpleMessage& from);
-  void Clear();
-  bool IsInitialized() const;
+  void Clear() PROTOBUF_FINAL;
+  bool IsInitialized() const PROTOBUF_FINAL;
 
-  int ByteSize() const;
+  size_t ByteSizeLong() const PROTOBUF_FINAL;
   bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
+      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
   void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
+      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
+  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
   private:
   void SharedCtor();
   void SharedDtor();
-  void SetCachedSize(int size) const;
+  void SetCachedSize(int size) const PROTOBUF_FINAL;
+  void InternalSwap(SimpleMessage* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
   public:
-  ::google::protobuf::Metadata GetMetadata() const;
+
+  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;
 
   // nested types ----------------------------------------------------
 
   // accessors -------------------------------------------------------
 
-  // required string id = 1;
-  inline bool has_id() const;
-  inline void clear_id();
-  static const int kIdFieldNumber = 1;
-  inline const ::std::string& id() const;
-  inline void set_id(const ::std::string& value);
-  inline void set_id(const char* value);
-  inline void set_id(const char* value, size_t size);
-  inline ::std::string* mutable_id();
-  inline ::std::string* release_id();
-  inline void set_allocated_id(::std::string* id);
-
   // repeated int32 numbers = 2;
-  inline int numbers_size() const;
-  inline void clear_numbers();
+  int numbers_size() const;
+  void clear_numbers();
   static const int kNumbersFieldNumber = 2;
-  inline ::google::protobuf::int32 numbers(int index) const;
-  inline void set_numbers(int index, ::google::protobuf::int32 value);
-  inline void add_numbers(::google::protobuf::int32 value);
-  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+  ::google::protobuf::int32 numbers(int index) const;
+  void set_numbers(int index, ::google::protobuf::int32 value);
+  void add_numbers(::google::protobuf::int32 value);
+  const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
       numbers() const;
-  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
       mutable_numbers();
 
+  // required string id = 1;
+  bool has_id() const;
+  void clear_id();
+  static const int kIdFieldNumber = 1;
+  const ::std::string& id() const;
+  void set_id(const ::std::string& value);
+  #if LANG_CXX11
+  void set_id(::std::string&& value);
+  #endif
+  void set_id(const char* value);
+  void set_id(const char* value, size_t size);
+  ::std::string* mutable_id();
+  ::std::string* release_id();
+  void set_allocated_id(::std::string* id);
+
   // @@protoc_insertion_point(class_scope:tests.SimpleMessage)
  private:
-  inline void set_has_id();
-  inline void clear_has_id();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
+  void set_has_id();
+  void clear_has_id();
 
-  ::google::protobuf::uint32 _has_bits_[1];
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::HasBits<1> _has_bits_;
   mutable int _cached_size_;
-  ::std::string* id_;
   ::google::protobuf::RepeatedField< ::google::protobuf::int32 > numbers_;
-  friend void  protobuf_AddDesc_protobuf_5ftests_2eproto();
-  friend void protobuf_AssignDesc_protobuf_5ftests_2eproto();
-  friend void protobuf_ShutdownFile_protobuf_5ftests_2eproto();
-
-  void InitAsDefaultInstance();
-  static SimpleMessage* default_instance_;
+  ::google::protobuf::internal::ArenaStringPtr id_;
+  friend struct protobuf_protobuf_5ftests_2eproto::TableStruct;
 };
 // -------------------------------------------------------------------
 
-class Message : public ::google::protobuf::Message {
+class Message : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:tests.Message) */ {
  public:
   Message();
   virtual ~Message();
@@ -286,392 +350,423 @@ class Message : public ::google::protobuf::Message {
   }
 
   inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
+    return _internal_metadata_.unknown_fields();
   }
 
   inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
+    return _internal_metadata_.mutable_unknown_fields();
   }
 
   static const ::google::protobuf::Descriptor* descriptor();
   static const Message& default_instance();
 
+  static inline const Message* internal_default_instance() {
+    return reinterpret_cast<const Message*>(
+               &_Message_default_instance_);
+  }
+  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
+    2;
+
   void Swap(Message* other);
 
   // implements Message ----------------------------------------------
 
-  Message* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
+  inline Message* New() const PROTOBUF_FINAL { return New(NULL); }
+
+  Message* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
+  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
+  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
   void CopyFrom(const Message& from);
   void MergeFrom(const Message& from);
-  void Clear();
-  bool IsInitialized() const;
+  void Clear() PROTOBUF_FINAL;
+  bool IsInitialized() const PROTOBUF_FINAL;
 
-  int ByteSize() const;
+  size_t ByteSizeLong() const PROTOBUF_FINAL;
   bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
+      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
   void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
+      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
+  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
   private:
   void SharedCtor();
   void SharedDtor();
-  void SetCachedSize(int size) const;
+  void SetCachedSize(int size) const PROTOBUF_FINAL;
+  void InternalSwap(Message* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
   public:
-  ::google::protobuf::Metadata GetMetadata() const;
+
+  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;
 
   // nested types ----------------------------------------------------
 
   // accessors -------------------------------------------------------
 
-  // required bool b = 26;
-  inline bool has_b() const;
-  inline void clear_b();
-  static const int kBFieldNumber = 26;
-  inline bool b() const;
-  inline void set_b(bool value);
-
-  // required string str = 1;
-  inline bool has_str() const;
-  inline void clear_str();
-  static const int kStrFieldNumber = 1;
-  inline const ::std::string& str() const;
-  inline void set_str(const ::std::string& value);
-  inline void set_str(const char* value);
-  inline void set_str(const char* value, size_t size);
-  inline ::std::string* mutable_str();
-  inline ::std::string* release_str();
-  inline void set_allocated_str(::std::string* str);
-
-  // required bytes bytes = 2;
-  inline bool has_bytes() const;
-  inline void clear_bytes();
-  static const int kBytesFieldNumber = 2;
-  inline const ::std::string& bytes() const;
-  inline void set_bytes(const ::std::string& value);
-  inline void set_bytes(const char* value);
-  inline void set_bytes(const void* value, size_t size);
-  inline ::std::string* mutable_bytes();
-  inline ::std::string* release_bytes();
-  inline void set_allocated_bytes(::std::string* bytes);
-
-  // optional int32 int32 = 3;
-  inline bool has_int32() const;
-  inline void clear_int32();
-  static const int kInt32FieldNumber = 3;
-  inline ::google::protobuf::int32 int32() const;
-  inline void set_int32(::google::protobuf::int32 value);
-
-  // optional int64 int64 = 4;
-  inline bool has_int64() const;
-  inline void clear_int64();
-  static const int kInt64FieldNumber = 4;
-  inline ::google::protobuf::int64 int64() const;
-  inline void set_int64(::google::protobuf::int64 value);
-
-  // optional uint32 uint32 = 5;
-  inline bool has_uint32() const;
-  inline void clear_uint32();
-  static const int kUint32FieldNumber = 5;
-  inline ::google::protobuf::uint32 uint32() const;
-  inline void set_uint32(::google::protobuf::uint32 value);
-
-  // optional uint64 uint64 = 6;
-  inline bool has_uint64() const;
-  inline void clear_uint64();
-  static const int kUint64FieldNumber = 6;
-  inline ::google::protobuf::uint64 uint64() const;
-  inline void set_uint64(::google::protobuf::uint64 value);
-
-  // optional sint32 sint32 = 7;
-  inline bool has_sint32() const;
-  inline void clear_sint32();
-  static const int kSint32FieldNumber = 7;
-  inline ::google::protobuf::int32 sint32() const;
-  inline void set_sint32(::google::protobuf::int32 value);
-
-  // optional sint64 sint64 = 8;
-  inline bool has_sint64() const;
-  inline void clear_sint64();
-  static const int kSint64FieldNumber = 8;
-  inline ::google::protobuf::int64 sint64() const;
-  inline void set_sint64(::google::protobuf::int64 value);
-
-  // required float f = 9;
-  inline bool has_f() const;
-  inline void clear_f();
-  static const int kFFieldNumber = 9;
-  inline float f() const;
-  inline void set_f(float value);
-
-  // required double d = 10;
-  inline bool has_d() const;
-  inline void clear_d();
-  static const int kDFieldNumber = 10;
-  inline double d() const;
-  inline void set_d(double value);
-
-  // required .tests.Enum e = 11;
-  inline bool has_e() const;
-  inline void clear_e();
-  static const int kEFieldNumber = 11;
-  inline ::tests::Enum e() const;
-  inline void set_e(::tests::Enum value);
-
-  // required .tests.Nested nested = 12;
-  inline bool has_nested() const;
-  inline void clear_nested();
-  static const int kNestedFieldNumber = 12;
-  inline const ::tests::Nested& nested() const;
-  inline ::tests::Nested* mutable_nested();
-  inline ::tests::Nested* release_nested();
-  inline void set_allocated_nested(::tests::Nested* nested);
-
-  // repeated bool repeated_bool = 27;
-  inline int repeated_bool_size() const;
-  inline void clear_repeated_bool();
-  static const int kRepeatedBoolFieldNumber = 27;
-  inline bool repeated_bool(int index) const;
-  inline void set_repeated_bool(int index, bool value);
-  inline void add_repeated_bool(bool value);
-  inline const ::google::protobuf::RepeatedField< bool >&
-      repeated_bool() const;
-  inline ::google::protobuf::RepeatedField< bool >*
-      mutable_repeated_bool();
-
   // repeated string repeated_string = 13;
-  inline int repeated_string_size() const;
-  inline void clear_repeated_string();
+  int repeated_string_size() const;
+  void clear_repeated_string();
   static const int kRepeatedStringFieldNumber = 13;
-  inline const ::std::string& repeated_string(int index) const;
-  inline ::std::string* mutable_repeated_string(int index);
-  inline void set_repeated_string(int index, const ::std::string& value);
-  inline void set_repeated_string(int index, const char* value);
-  inline void set_repeated_string(int index, const char* value, size_t size);
-  inline ::std::string* add_repeated_string();
-  inline void add_repeated_string(const ::std::string& value);
-  inline void add_repeated_string(const char* value);
-  inline void add_repeated_string(const char* value, size_t size);
-  inline const ::google::protobuf::RepeatedPtrField< ::std::string>& repeated_string() const;
-  inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_repeated_string();
+  const ::std::string& repeated_string(int index) const;
+  ::std::string* mutable_repeated_string(int index);
+  void set_repeated_string(int index, const ::std::string& value);
+  #if LANG_CXX11
+  void set_repeated_string(int index, ::std::string&& value);
+  #endif
+  void set_repeated_string(int index, const char* value);
+  void set_repeated_string(int index, const char* value, size_t size);
+  ::std::string* add_repeated_string();
+  void add_repeated_string(const ::std::string& value);
+  #if LANG_CXX11
+  void add_repeated_string(::std::string&& value);
+  #endif
+  void add_repeated_string(const char* value);
+  void add_repeated_string(const char* value, size_t size);
+  const ::google::protobuf::RepeatedPtrField< ::std::string>& repeated_string() const;
+  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_repeated_string();
 
   // repeated bytes repeated_bytes = 14;
-  inline int repeated_bytes_size() const;
-  inline void clear_repeated_bytes();
+  int repeated_bytes_size() const;
+  void clear_repeated_bytes();
   static const int kRepeatedBytesFieldNumber = 14;
-  inline const ::std::string& repeated_bytes(int index) const;
-  inline ::std::string* mutable_repeated_bytes(int index);
-  inline void set_repeated_bytes(int index, const ::std::string& value);
-  inline void set_repeated_bytes(int index, const char* value);
-  inline void set_repeated_bytes(int index, const void* value, size_t size);
-  inline ::std::string* add_repeated_bytes();
-  inline void add_repeated_bytes(const ::std::string& value);
-  inline void add_repeated_bytes(const char* value);
-  inline void add_repeated_bytes(const void* value, size_t size);
-  inline const ::google::protobuf::RepeatedPtrField< ::std::string>& repeated_bytes() const;
-  inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_repeated_bytes();
+  const ::std::string& repeated_bytes(int index) const;
+  ::std::string* mutable_repeated_bytes(int index);
+  void set_repeated_bytes(int index, const ::std::string& value);
+  #if LANG_CXX11
+  void set_repeated_bytes(int index, ::std::string&& value);
+  #endif
+  void set_repeated_bytes(int index, const char* value);
+  void set_repeated_bytes(int index, const void* value, size_t size);
+  ::std::string* add_repeated_bytes();
+  void add_repeated_bytes(const ::std::string& value);
+  #if LANG_CXX11
+  void add_repeated_bytes(::std::string&& value);
+  #endif
+  void add_repeated_bytes(const char* value);
+  void add_repeated_bytes(const void* value, size_t size);
+  const ::google::protobuf::RepeatedPtrField< ::std::string>& repeated_bytes() const;
+  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_repeated_bytes();
 
   // repeated int32 repeated_int32 = 15;
-  inline int repeated_int32_size() const;
-  inline void clear_repeated_int32();
+  int repeated_int32_size() const;
+  void clear_repeated_int32();
   static const int kRepeatedInt32FieldNumber = 15;
-  inline ::google::protobuf::int32 repeated_int32(int index) const;
-  inline void set_repeated_int32(int index, ::google::protobuf::int32 value);
-  inline void add_repeated_int32(::google::protobuf::int32 value);
-  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+  ::google::protobuf::int32 repeated_int32(int index) const;
+  void set_repeated_int32(int index, ::google::protobuf::int32 value);
+  void add_repeated_int32(::google::protobuf::int32 value);
+  const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
       repeated_int32() const;
-  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
       mutable_repeated_int32();
 
   // repeated int64 repeated_int64 = 16;
-  inline int repeated_int64_size() const;
-  inline void clear_repeated_int64();
+  int repeated_int64_size() const;
+  void clear_repeated_int64();
   static const int kRepeatedInt64FieldNumber = 16;
-  inline ::google::protobuf::int64 repeated_int64(int index) const;
-  inline void set_repeated_int64(int index, ::google::protobuf::int64 value);
-  inline void add_repeated_int64(::google::protobuf::int64 value);
-  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
+  ::google::protobuf::int64 repeated_int64(int index) const;
+  void set_repeated_int64(int index, ::google::protobuf::int64 value);
+  void add_repeated_int64(::google::protobuf::int64 value);
+  const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
       repeated_int64() const;
-  inline ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
+  ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
       mutable_repeated_int64();
 
   // repeated uint32 repeated_uint32 = 17;
-  inline int repeated_uint32_size() const;
-  inline void clear_repeated_uint32();
+  int repeated_uint32_size() const;
+  void clear_repeated_uint32();
   static const int kRepeatedUint32FieldNumber = 17;
-  inline ::google::protobuf::uint32 repeated_uint32(int index) const;
-  inline void set_repeated_uint32(int index, ::google::protobuf::uint32 value);
-  inline void add_repeated_uint32(::google::protobuf::uint32 value);
-  inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
+  ::google::protobuf::uint32 repeated_uint32(int index) const;
+  void set_repeated_uint32(int index, ::google::protobuf::uint32 value);
+  void add_repeated_uint32(::google::protobuf::uint32 value);
+  const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
       repeated_uint32() const;
-  inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
+  ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
       mutable_repeated_uint32();
 
   // repeated uint64 repeated_uint64 = 18;
-  inline int repeated_uint64_size() const;
-  inline void clear_repeated_uint64();
+  int repeated_uint64_size() const;
+  void clear_repeated_uint64();
   static const int kRepeatedUint64FieldNumber = 18;
-  inline ::google::protobuf::uint64 repeated_uint64(int index) const;
-  inline void set_repeated_uint64(int index, ::google::protobuf::uint64 value);
-  inline void add_repeated_uint64(::google::protobuf::uint64 value);
-  inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint64 >&
+  ::google::protobuf::uint64 repeated_uint64(int index) const;
+  void set_repeated_uint64(int index, ::google::protobuf::uint64 value);
+  void add_repeated_uint64(::google::protobuf::uint64 value);
+  const ::google::protobuf::RepeatedField< ::google::protobuf::uint64 >&
       repeated_uint64() const;
-  inline ::google::protobuf::RepeatedField< ::google::protobuf::uint64 >*
+  ::google::protobuf::RepeatedField< ::google::protobuf::uint64 >*
       mutable_repeated_uint64();
 
   // repeated sint32 repeated_sint32 = 19;
-  inline int repeated_sint32_size() const;
-  inline void clear_repeated_sint32();
+  int repeated_sint32_size() const;
+  void clear_repeated_sint32();
   static const int kRepeatedSint32FieldNumber = 19;
-  inline ::google::protobuf::int32 repeated_sint32(int index) const;
-  inline void set_repeated_sint32(int index, ::google::protobuf::int32 value);
-  inline void add_repeated_sint32(::google::protobuf::int32 value);
-  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+  ::google::protobuf::int32 repeated_sint32(int index) const;
+  void set_repeated_sint32(int index, ::google::protobuf::int32 value);
+  void add_repeated_sint32(::google::protobuf::int32 value);
+  const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
       repeated_sint32() const;
-  inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+  ::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
       mutable_repeated_sint32();
 
   // repeated sint64 repeated_sint64 = 20;
-  inline int repeated_sint64_size() const;
-  inline void clear_repeated_sint64();
+  int repeated_sint64_size() const;
+  void clear_repeated_sint64();
   static const int kRepeatedSint64FieldNumber = 20;
-  inline ::google::protobuf::int64 repeated_sint64(int index) const;
-  inline void set_repeated_sint64(int index, ::google::protobuf::int64 value);
-  inline void add_repeated_sint64(::google::protobuf::int64 value);
-  inline const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
+  ::google::protobuf::int64 repeated_sint64(int index) const;
+  void set_repeated_sint64(int index, ::google::protobuf::int64 value);
+  void add_repeated_sint64(::google::protobuf::int64 value);
+  const ::google::protobuf::RepeatedField< ::google::protobuf::int64 >&
       repeated_sint64() const;
-  inline ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
+  ::google::protobuf::RepeatedField< ::google::protobuf::int64 >*
       mutable_repeated_sint64();
 
   // repeated float repeated_float = 21;
-  inline int repeated_float_size() const;
-  inline void clear_repeated_float();
+  int repeated_float_size() const;
+  void clear_repeated_float();
   static const int kRepeatedFloatFieldNumber = 21;
-  inline float repeated_float(int index) const;
-  inline void set_repeated_float(int index, float value);
-  inline void add_repeated_float(float value);
-  inline const ::google::protobuf::RepeatedField< float >&
+  float repeated_float(int index) const;
+  void set_repeated_float(int index, float value);
+  void add_repeated_float(float value);
+  const ::google::protobuf::RepeatedField< float >&
       repeated_float() const;
-  inline ::google::protobuf::RepeatedField< float >*
+  ::google::protobuf::RepeatedField< float >*
       mutable_repeated_float();
 
   // repeated double repeated_double = 22;
-  inline int repeated_double_size() const;
-  inline void clear_repeated_double();
+  int repeated_double_size() const;
+  void clear_repeated_double();
   static const int kRepeatedDoubleFieldNumber = 22;
-  inline double repeated_double(int index) const;
-  inline void set_repeated_double(int index, double value);
-  inline void add_repeated_double(double value);
-  inline const ::google::protobuf::RepeatedField< double >&
+  double repeated_double(int index) const;
+  void set_repeated_double(int index, double value);
+  void add_repeated_double(double value);
+  const ::google::protobuf::RepeatedField< double >&
       repeated_double() const;
-  inline ::google::protobuf::RepeatedField< double >*
+  ::google::protobuf::RepeatedField< double >*
       mutable_repeated_double();
 
   // repeated .tests.Enum repeated_enum = 23;
-  inline int repeated_enum_size() const;
-  inline void clear_repeated_enum();
+  int repeated_enum_size() const;
+  void clear_repeated_enum();
   static const int kRepeatedEnumFieldNumber = 23;
-  inline ::tests::Enum repeated_enum(int index) const;
-  inline void set_repeated_enum(int index, ::tests::Enum value);
-  inline void add_repeated_enum(::tests::Enum value);
-  inline const ::google::protobuf::RepeatedField<int>& repeated_enum() const;
-  inline ::google::protobuf::RepeatedField<int>* mutable_repeated_enum();
+  ::tests::Enum repeated_enum(int index) const;
+  void set_repeated_enum(int index, ::tests::Enum value);
+  void add_repeated_enum(::tests::Enum value);
+  const ::google::protobuf::RepeatedField<int>& repeated_enum() const;
+  ::google::protobuf::RepeatedField<int>* mutable_repeated_enum();
 
   // repeated .tests.Nested repeated_nested = 24;
-  inline int repeated_nested_size() const;
-  inline void clear_repeated_nested();
+  int repeated_nested_size() const;
+  void clear_repeated_nested();
   static const int kRepeatedNestedFieldNumber = 24;
-  inline const ::tests::Nested& repeated_nested(int index) const;
-  inline ::tests::Nested* mutable_repeated_nested(int index);
-  inline ::tests::Nested* add_repeated_nested();
-  inline const ::google::protobuf::RepeatedPtrField< ::tests::Nested >&
-      repeated_nested() const;
-  inline ::google::protobuf::RepeatedPtrField< ::tests::Nested >*
+  const ::tests::Nested& repeated_nested(int index) const;
+  ::tests::Nested* mutable_repeated_nested(int index);
+  ::tests::Nested* add_repeated_nested();
+  ::google::protobuf::RepeatedPtrField< ::tests::Nested >*
       mutable_repeated_nested();
+  const ::google::protobuf::RepeatedPtrField< ::tests::Nested >&
+      repeated_nested() const;
 
   // repeated string empty = 25;
-  inline int empty_size() const;
-  inline void clear_empty();
+  int empty_size() const;
+  void clear_empty();
   static const int kEmptyFieldNumber = 25;
-  inline const ::std::string& empty(int index) const;
-  inline ::std::string* mutable_empty(int index);
-  inline void set_empty(int index, const ::std::string& value);
-  inline void set_empty(int index, const char* value);
-  inline void set_empty(int index, const char* value, size_t size);
-  inline ::std::string* add_empty();
-  inline void add_empty(const ::std::string& value);
-  inline void add_empty(const char* value);
-  inline void add_empty(const char* value, size_t size);
-  inline const ::google::protobuf::RepeatedPtrField< ::std::string>& empty() const;
-  inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_empty();
+  const ::std::string& empty(int index) const;
+  ::std::string* mutable_empty(int index);
+  void set_empty(int index, const ::std::string& value);
+  #if LANG_CXX11
+  void set_empty(int index, ::std::string&& value);
+  #endif
+  void set_empty(int index, const char* value);
+  void set_empty(int index, const char* value, size_t size);
+  ::std::string* add_empty();
+  void add_empty(const ::std::string& value);
+  #if LANG_CXX11
+  void add_empty(::std::string&& value);
+  #endif
+  void add_empty(const char* value);
+  void add_empty(const char* value, size_t size);
+  const ::google::protobuf::RepeatedPtrField< ::std::string>& empty() const;
+  ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_empty();
 
-  // optional double optional_default = 28 [default = 42];
-  inline bool has_optional_default() const;
-  inline void clear_optional_default();
-  static const int kOptionalDefaultFieldNumber = 28;
-  inline double optional_default() const;
-  inline void set_optional_default(double value);
+  // repeated bool repeated_bool = 27;
+  int repeated_bool_size() const;
+  void clear_repeated_bool();
+  static const int kRepeatedBoolFieldNumber = 27;
+  bool repeated_bool(int index) const;
+  void set_repeated_bool(int index, bool value);
+  void add_repeated_bool(bool value);
+  const ::google::protobuf::RepeatedField< bool >&
+      repeated_bool() const;
+  ::google::protobuf::RepeatedField< bool >*
+      mutable_repeated_bool();
+
+  // required string str = 1;
+  bool has_str() const;
+  void clear_str();
+  static const int kStrFieldNumber = 1;
+  const ::std::string& str() const;
+  void set_str(const ::std::string& value);
+  #if LANG_CXX11
+  void set_str(::std::string&& value);
+  #endif
+  void set_str(const char* value);
+  void set_str(const char* value, size_t size);
+  ::std::string* mutable_str();
+  ::std::string* release_str();
+  void set_allocated_str(::std::string* str);
+
+  // required bytes bytes = 2;
+  bool has_bytes() const;
+  void clear_bytes();
+  static const int kBytesFieldNumber = 2;
+  const ::std::string& bytes() const;
+  void set_bytes(const ::std::string& value);
+  #if LANG_CXX11
+  void set_bytes(::std::string&& value);
+  #endif
+  void set_bytes(const char* value);
+  void set_bytes(const void* value, size_t size);
+  ::std::string* mutable_bytes();
+  ::std::string* release_bytes();
+  void set_allocated_bytes(::std::string* bytes);
+
+  // required .tests.Nested nested = 12;
+  bool has_nested() const;
+  void clear_nested();
+  static const int kNestedFieldNumber = 12;
+  const ::tests::Nested& nested() const;
+  ::tests::Nested* mutable_nested();
+  ::tests::Nested* release_nested();
+  void set_allocated_nested(::tests::Nested* nested);
+
+  // optional int64 int64 = 4;
+  bool has_int64() const;
+  void clear_int64();
+  static const int kInt64FieldNumber = 4;
+  ::google::protobuf::int64 int64() const;
+  void set_int64(::google::protobuf::int64 value);
+
+  // optional int32 int32 = 3;
+  bool has_int32() const;
+  void clear_int32();
+  static const int kInt32FieldNumber = 3;
+  ::google::protobuf::int32 int32() const;
+  void set_int32(::google::protobuf::int32 value);
+
+  // optional uint32 uint32 = 5;
+  bool has_uint32() const;
+  void clear_uint32();
+  static const int kUint32FieldNumber = 5;
+  ::google::protobuf::uint32 uint32() const;
+  void set_uint32(::google::protobuf::uint32 value);
+
+  // optional uint64 uint64 = 6;
+  bool has_uint64() const;
+  void clear_uint64();
+  static const int kUint64FieldNumber = 6;
+  ::google::protobuf::uint64 uint64() const;
+  void set_uint64(::google::protobuf::uint64 value);
+
+  // optional sint64 sint64 = 8;
+  bool has_sint64() const;
+  void clear_sint64();
+  static const int kSint64FieldNumber = 8;
+  ::google::protobuf::int64 sint64() const;
+  void set_sint64(::google::protobuf::int64 value);
+
+  // optional sint32 sint32 = 7;
+  bool has_sint32() const;
+  void clear_sint32();
+  static const int kSint32FieldNumber = 7;
+  ::google::protobuf::int32 sint32() const;
+  void set_sint32(::google::protobuf::int32 value);
+
+  // required float f = 9;
+  bool has_f() const;
+  void clear_f();
+  static const int kFFieldNumber = 9;
+  float f() const;
+  void set_f(float value);
+
+  // required double d = 10;
+  bool has_d() const;
+  void clear_d();
+  static const int kDFieldNumber = 10;
+  double d() const;
+  void set_d(double value);
 
   // optional double optional_no_default = 29;
-  inline bool has_optional_no_default() const;
-  inline void clear_optional_no_default();
+  bool has_optional_no_default() const;
+  void clear_optional_no_default();
   static const int kOptionalNoDefaultFieldNumber = 29;
-  inline double optional_no_default() const;
-  inline void set_optional_no_default(double value);
+  double optional_no_default() const;
+  void set_optional_no_default(double value);
+
+  // required bool b = 26;
+  bool has_b() const;
+  void clear_b();
+  static const int kBFieldNumber = 26;
+  bool b() const;
+  void set_b(bool value);
+
+  // required .tests.Enum e = 11;
+  bool has_e() const;
+  void clear_e();
+  static const int kEFieldNumber = 11;
+  ::tests::Enum e() const;
+  void set_e(::tests::Enum value);
+
+  // optional double optional_default = 28 [default = 42];
+  bool has_optional_default() const;
+  void clear_optional_default();
+  static const int kOptionalDefaultFieldNumber = 28;
+  double optional_default() const;
+  void set_optional_default(double value);
 
   // @@protoc_insertion_point(class_scope:tests.Message)
  private:
-  inline void set_has_b();
-  inline void clear_has_b();
-  inline void set_has_str();
-  inline void clear_has_str();
-  inline void set_has_bytes();
-  inline void clear_has_bytes();
-  inline void set_has_int32();
-  inline void clear_has_int32();
-  inline void set_has_int64();
-  inline void clear_has_int64();
-  inline void set_has_uint32();
-  inline void clear_has_uint32();
-  inline void set_has_uint64();
-  inline void clear_has_uint64();
-  inline void set_has_sint32();
-  inline void clear_has_sint32();
-  inline void set_has_sint64();
-  inline void clear_has_sint64();
-  inline void set_has_f();
-  inline void clear_has_f();
-  inline void set_has_d();
-  inline void clear_has_d();
-  inline void set_has_e();
-  inline void clear_has_e();
-  inline void set_has_nested();
-  inline void clear_has_nested();
-  inline void set_has_optional_default();
-  inline void clear_has_optional_default();
-  inline void set_has_optional_no_default();
-  inline void clear_has_optional_no_default();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
+  void set_has_b();
+  void clear_has_b();
+  void set_has_str();
+  void clear_has_str();
+  void set_has_bytes();
+  void clear_has_bytes();
+  void set_has_int32();
+  void clear_has_int32();
+  void set_has_int64();
+  void clear_has_int64();
+  void set_has_uint32();
+  void clear_has_uint32();
+  void set_has_uint64();
+  void clear_has_uint64();
+  void set_has_sint32();
+  void clear_has_sint32();
+  void set_has_sint64();
+  void clear_has_sint64();
+  void set_has_f();
+  void clear_has_f();
+  void set_has_d();
+  void clear_has_d();
+  void set_has_e();
+  void clear_has_e();
+  void set_has_nested();
+  void clear_has_nested();
+  void set_has_optional_default();
+  void clear_has_optional_default();
+  void set_has_optional_no_default();
+  void clear_has_optional_no_default();
+
+  // helper for ByteSizeLong()
+  size_t RequiredFieldsByteSizeFallback() const;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::HasBits<1> _has_bits_;
   mutable int _cached_size_;
-  ::std::string* str_;
-  bool b_;
-  ::google::protobuf::int32 int32_;
-  ::std::string* bytes_;
-  ::google::protobuf::int64 int64_;
-  ::google::protobuf::uint64 uint64_;
-  ::google::protobuf::uint32 uint32_;
-  ::google::protobuf::int32 sint32_;
-  ::google::protobuf::int64 sint64_;
-  double d_;
-  float f_;
-  int e_;
-  ::tests::Nested* nested_;
-  ::google::protobuf::RepeatedField< bool > repeated_bool_;
   ::google::protobuf::RepeatedPtrField< ::std::string> repeated_string_;
   ::google::protobuf::RepeatedPtrField< ::std::string> repeated_bytes_;
   ::google::protobuf::RepeatedField< ::google::protobuf::int32 > repeated_int32_;
@@ -685,18 +780,27 @@ class Message : public ::google::protobuf::Message {
   ::google::protobuf::RepeatedField<int> repeated_enum_;
   ::google::protobuf::RepeatedPtrField< ::tests::Nested > repeated_nested_;
   ::google::protobuf::RepeatedPtrField< ::std::string> empty_;
-  double optional_default_;
+  ::google::protobuf::RepeatedField< bool > repeated_bool_;
+  ::google::protobuf::internal::ArenaStringPtr str_;
+  ::google::protobuf::internal::ArenaStringPtr bytes_;
+  ::tests::Nested* nested_;
+  ::google::protobuf::int64 int64_;
+  ::google::protobuf::int32 int32_;
+  ::google::protobuf::uint32 uint32_;
+  ::google::protobuf::uint64 uint64_;
+  ::google::protobuf::int64 sint64_;
+  ::google::protobuf::int32 sint32_;
+  float f_;
+  double d_;
   double optional_no_default_;
-  friend void  protobuf_AddDesc_protobuf_5ftests_2eproto();
-  friend void protobuf_AssignDesc_protobuf_5ftests_2eproto();
-  friend void protobuf_ShutdownFile_protobuf_5ftests_2eproto();
-
-  void InitAsDefaultInstance();
-  static Message* default_instance_;
+  bool b_;
+  int e_;
+  double optional_default_;
+  friend struct protobuf_protobuf_5ftests_2eproto::TableStruct;
 };
 // -------------------------------------------------------------------
 
-class ArrayMessage : public ::google::protobuf::Message {
+class ArrayMessage : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:tests.ArrayMessage) */ {
  public:
   ArrayMessage();
   virtual ~ArrayMessage();
@@ -709,78 +813,92 @@ class ArrayMessage : public ::google::protobuf::Message {
   }
 
   inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
+    return _internal_metadata_.unknown_fields();
   }
 
   inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
+    return _internal_metadata_.mutable_unknown_fields();
   }
 
   static const ::google::protobuf::Descriptor* descriptor();
   static const ArrayMessage& default_instance();
 
+  static inline const ArrayMessage* internal_default_instance() {
+    return reinterpret_cast<const ArrayMessage*>(
+               &_ArrayMessage_default_instance_);
+  }
+  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
+    3;
+
   void Swap(ArrayMessage* other);
 
   // implements Message ----------------------------------------------
 
-  ArrayMessage* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
+  inline ArrayMessage* New() const PROTOBUF_FINAL { return New(NULL); }
+
+  ArrayMessage* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
+  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
+  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
   void CopyFrom(const ArrayMessage& from);
   void MergeFrom(const ArrayMessage& from);
-  void Clear();
-  bool IsInitialized() const;
+  void Clear() PROTOBUF_FINAL;
+  bool IsInitialized() const PROTOBUF_FINAL;
 
-  int ByteSize() const;
+  size_t ByteSizeLong() const PROTOBUF_FINAL;
   bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
+      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
   void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
+      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
+  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
   private:
   void SharedCtor();
   void SharedDtor();
-  void SetCachedSize(int size) const;
+  void SetCachedSize(int size) const PROTOBUF_FINAL;
+  void InternalSwap(ArrayMessage* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
   public:
-  ::google::protobuf::Metadata GetMetadata() const;
+
+  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;
 
   // nested types ----------------------------------------------------
 
   // accessors -------------------------------------------------------
 
   // repeated .tests.SimpleMessage values = 1;
-  inline int values_size() const;
-  inline void clear_values();
+  int values_size() const;
+  void clear_values();
   static const int kValuesFieldNumber = 1;
-  inline const ::tests::SimpleMessage& values(int index) const;
-  inline ::tests::SimpleMessage* mutable_values(int index);
-  inline ::tests::SimpleMessage* add_values();
-  inline const ::google::protobuf::RepeatedPtrField< ::tests::SimpleMessage >&
-      values() const;
-  inline ::google::protobuf::RepeatedPtrField< ::tests::SimpleMessage >*
+  const ::tests::SimpleMessage& values(int index) const;
+  ::tests::SimpleMessage* mutable_values(int index);
+  ::tests::SimpleMessage* add_values();
+  ::google::protobuf::RepeatedPtrField< ::tests::SimpleMessage >*
       mutable_values();
+  const ::google::protobuf::RepeatedPtrField< ::tests::SimpleMessage >&
+      values() const;
 
   // @@protoc_insertion_point(class_scope:tests.ArrayMessage)
  private:
 
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::HasBits<1> _has_bits_;
   mutable int _cached_size_;
   ::google::protobuf::RepeatedPtrField< ::tests::SimpleMessage > values_;
-  friend void  protobuf_AddDesc_protobuf_5ftests_2eproto();
-  friend void protobuf_AssignDesc_protobuf_5ftests_2eproto();
-  friend void protobuf_ShutdownFile_protobuf_5ftests_2eproto();
-
-  void InitAsDefaultInstance();
-  static ArrayMessage* default_instance_;
+  friend struct protobuf_protobuf_5ftests_2eproto::TableStruct;
 };
 // ===================================================================
 
 
 // ===================================================================
 
+#if !PROTOBUF_INLINE_NOT_IN_HEADERS
 // Nested
 
 // required string str = 1;
@@ -794,68 +912,55 @@ inline void Nested::clear_has_str() {
   _has_bits_[0] &= ~0x00000001u;
 }
 inline void Nested::clear_str() {
-  if (str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_->clear();
-  }
+  str_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   clear_has_str();
 }
 inline const ::std::string& Nested::str() const {
   // @@protoc_insertion_point(field_get:tests.Nested.str)
-  return *str_;
+  return str_.GetNoArena();
 }
 inline void Nested::set_str(const ::std::string& value) {
   set_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_ = new ::std::string;
-  }
-  str_->assign(value);
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
   // @@protoc_insertion_point(field_set:tests.Nested.str)
 }
+#if LANG_CXX11
+inline void Nested::set_str(::std::string&& value) {
+  set_has_str();
+  str_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tests.Nested.str)
+}
+#endif
 inline void Nested::set_str(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   set_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_ = new ::std::string;
-  }
-  str_->assign(value);
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
   // @@protoc_insertion_point(field_set_char:tests.Nested.str)
 }
 inline void Nested::set_str(const char* value, size_t size) {
   set_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_ = new ::std::string;
-  }
-  str_->assign(reinterpret_cast<const char*>(value), size);
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
   // @@protoc_insertion_point(field_set_pointer:tests.Nested.str)
 }
 inline ::std::string* Nested::mutable_str() {
   set_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_ = new ::std::string;
-  }
   // @@protoc_insertion_point(field_mutable:tests.Nested.str)
-  return str_;
+  return str_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline ::std::string* Nested::release_str() {
+  // @@protoc_insertion_point(field_release:tests.Nested.str)
   clear_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = str_;
-    str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
+  return str_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline void Nested::set_allocated_str(::std::string* str) {
-  if (str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete str_;
-  }
-  if (str) {
+  if (str != NULL) {
     set_has_str();
-    str_ = str;
   } else {
     clear_has_str();
-    str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   }
+  str_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), str);
   // @@protoc_insertion_point(field_set_allocated:tests.Nested.str)
 }
 
@@ -870,68 +975,55 @@ inline void Nested::clear_has_optional_str() {
   _has_bits_[0] &= ~0x00000002u;
 }
 inline void Nested::clear_optional_str() {
-  if (optional_str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    optional_str_->clear();
-  }
+  optional_str_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   clear_has_optional_str();
 }
 inline const ::std::string& Nested::optional_str() const {
   // @@protoc_insertion_point(field_get:tests.Nested.optional_str)
-  return *optional_str_;
+  return optional_str_.GetNoArena();
 }
 inline void Nested::set_optional_str(const ::std::string& value) {
   set_has_optional_str();
-  if (optional_str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    optional_str_ = new ::std::string;
-  }
-  optional_str_->assign(value);
+  optional_str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
   // @@protoc_insertion_point(field_set:tests.Nested.optional_str)
 }
+#if LANG_CXX11
+inline void Nested::set_optional_str(::std::string&& value) {
+  set_has_optional_str();
+  optional_str_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tests.Nested.optional_str)
+}
+#endif
 inline void Nested::set_optional_str(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   set_has_optional_str();
-  if (optional_str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    optional_str_ = new ::std::string;
-  }
-  optional_str_->assign(value);
+  optional_str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
   // @@protoc_insertion_point(field_set_char:tests.Nested.optional_str)
 }
 inline void Nested::set_optional_str(const char* value, size_t size) {
   set_has_optional_str();
-  if (optional_str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    optional_str_ = new ::std::string;
-  }
-  optional_str_->assign(reinterpret_cast<const char*>(value), size);
+  optional_str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
   // @@protoc_insertion_point(field_set_pointer:tests.Nested.optional_str)
 }
 inline ::std::string* Nested::mutable_optional_str() {
   set_has_optional_str();
-  if (optional_str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    optional_str_ = new ::std::string;
-  }
   // @@protoc_insertion_point(field_mutable:tests.Nested.optional_str)
-  return optional_str_;
+  return optional_str_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline ::std::string* Nested::release_optional_str() {
+  // @@protoc_insertion_point(field_release:tests.Nested.optional_str)
   clear_has_optional_str();
-  if (optional_str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = optional_str_;
-    optional_str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
+  return optional_str_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline void Nested::set_allocated_optional_str(::std::string* optional_str) {
-  if (optional_str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete optional_str_;
-  }
-  if (optional_str) {
+  if (optional_str != NULL) {
     set_has_optional_str();
-    optional_str_ = optional_str;
   } else {
     clear_has_optional_str();
-    optional_str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   }
+  optional_str_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), optional_str);
   // @@protoc_insertion_point(field_set_allocated:tests.Nested.optional_str)
 }
 
@@ -954,7 +1046,14 @@ inline void Nested::set_repeated_str(int index, const ::std::string& value) {
   // @@protoc_insertion_point(field_set:tests.Nested.repeated_str)
   repeated_str_.Mutable(index)->assign(value);
 }
+#if LANG_CXX11
+inline void Nested::set_repeated_str(int index, ::std::string&& value) {
+  // @@protoc_insertion_point(field_set:tests.Nested.repeated_str)
+  repeated_str_.Mutable(index)->assign(std::move(value));
+}
+#endif
 inline void Nested::set_repeated_str(int index, const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   repeated_str_.Mutable(index)->assign(value);
   // @@protoc_insertion_point(field_set_char:tests.Nested.repeated_str)
 }
@@ -964,13 +1063,21 @@ inline void Nested::set_repeated_str(int index, const char* value, size_t size)
   // @@protoc_insertion_point(field_set_pointer:tests.Nested.repeated_str)
 }
 inline ::std::string* Nested::add_repeated_str() {
+  // @@protoc_insertion_point(field_add_mutable:tests.Nested.repeated_str)
   return repeated_str_.Add();
 }
 inline void Nested::add_repeated_str(const ::std::string& value) {
   repeated_str_.Add()->assign(value);
   // @@protoc_insertion_point(field_add:tests.Nested.repeated_str)
 }
+#if LANG_CXX11
+inline void Nested::add_repeated_str(::std::string&& value) {
+  repeated_str_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:tests.Nested.repeated_str)
+}
+#endif
 inline void Nested::add_repeated_str(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   repeated_str_.Add()->assign(value);
   // @@protoc_insertion_point(field_add_char:tests.Nested.repeated_str)
 }
@@ -1004,68 +1111,55 @@ inline void SimpleMessage::clear_has_id() {
   _has_bits_[0] &= ~0x00000001u;
 }
 inline void SimpleMessage::clear_id() {
-  if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    id_->clear();
-  }
+  id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   clear_has_id();
 }
 inline const ::std::string& SimpleMessage::id() const {
   // @@protoc_insertion_point(field_get:tests.SimpleMessage.id)
-  return *id_;
+  return id_.GetNoArena();
 }
 inline void SimpleMessage::set_id(const ::std::string& value) {
   set_has_id();
-  if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    id_ = new ::std::string;
-  }
-  id_->assign(value);
+  id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
   // @@protoc_insertion_point(field_set:tests.SimpleMessage.id)
 }
+#if LANG_CXX11
+inline void SimpleMessage::set_id(::std::string&& value) {
+  set_has_id();
+  id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tests.SimpleMessage.id)
+}
+#endif
 inline void SimpleMessage::set_id(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   set_has_id();
-  if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    id_ = new ::std::string;
-  }
-  id_->assign(value);
+  id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
   // @@protoc_insertion_point(field_set_char:tests.SimpleMessage.id)
 }
 inline void SimpleMessage::set_id(const char* value, size_t size) {
   set_has_id();
-  if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    id_ = new ::std::string;
-  }
-  id_->assign(reinterpret_cast<const char*>(value), size);
+  id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
   // @@protoc_insertion_point(field_set_pointer:tests.SimpleMessage.id)
 }
 inline ::std::string* SimpleMessage::mutable_id() {
   set_has_id();
-  if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    id_ = new ::std::string;
-  }
   // @@protoc_insertion_point(field_mutable:tests.SimpleMessage.id)
-  return id_;
+  return id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline ::std::string* SimpleMessage::release_id() {
+  // @@protoc_insertion_point(field_release:tests.SimpleMessage.id)
   clear_has_id();
-  if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = id_;
-    id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
+  return id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline void SimpleMessage::set_allocated_id(::std::string* id) {
-  if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete id_;
-  }
-  if (id) {
+  if (id != NULL) {
     set_has_id();
-    id_ = id;
   } else {
     clear_has_id();
-    id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   }
+  id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), id);
   // @@protoc_insertion_point(field_set_allocated:tests.SimpleMessage.id)
 }
 
@@ -1105,13 +1199,13 @@ SimpleMessage::mutable_numbers() {
 
 // required bool b = 26;
 inline bool Message::has_b() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
+  return (_has_bits_[0] & 0x00001000u) != 0;
 }
 inline void Message::set_has_b() {
-  _has_bits_[0] |= 0x00000001u;
+  _has_bits_[0] |= 0x00001000u;
 }
 inline void Message::clear_has_b() {
-  _has_bits_[0] &= ~0x00000001u;
+  _has_bits_[0] &= ~0x00001000u;
 }
 inline void Message::clear_b() {
   b_ = false;
@@ -1129,165 +1223,139 @@ inline void Message::set_b(bool value) {
 
 // required string str = 1;
 inline bool Message::has_str() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
+  return (_has_bits_[0] & 0x00000001u) != 0;
 }
 inline void Message::set_has_str() {
-  _has_bits_[0] |= 0x00000002u;
+  _has_bits_[0] |= 0x00000001u;
 }
 inline void Message::clear_has_str() {
-  _has_bits_[0] &= ~0x00000002u;
+  _has_bits_[0] &= ~0x00000001u;
 }
 inline void Message::clear_str() {
-  if (str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_->clear();
-  }
+  str_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   clear_has_str();
 }
 inline const ::std::string& Message::str() const {
   // @@protoc_insertion_point(field_get:tests.Message.str)
-  return *str_;
+  return str_.GetNoArena();
 }
 inline void Message::set_str(const ::std::string& value) {
   set_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_ = new ::std::string;
-  }
-  str_->assign(value);
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
   // @@protoc_insertion_point(field_set:tests.Message.str)
 }
+#if LANG_CXX11
+inline void Message::set_str(::std::string&& value) {
+  set_has_str();
+  str_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tests.Message.str)
+}
+#endif
 inline void Message::set_str(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   set_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_ = new ::std::string;
-  }
-  str_->assign(value);
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
   // @@protoc_insertion_point(field_set_char:tests.Message.str)
 }
 inline void Message::set_str(const char* value, size_t size) {
   set_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_ = new ::std::string;
-  }
-  str_->assign(reinterpret_cast<const char*>(value), size);
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
   // @@protoc_insertion_point(field_set_pointer:tests.Message.str)
 }
 inline ::std::string* Message::mutable_str() {
   set_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    str_ = new ::std::string;
-  }
   // @@protoc_insertion_point(field_mutable:tests.Message.str)
-  return str_;
+  return str_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline ::std::string* Message::release_str() {
+  // @@protoc_insertion_point(field_release:tests.Message.str)
   clear_has_str();
-  if (str_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = str_;
-    str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
+  return str_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline void Message::set_allocated_str(::std::string* str) {
-  if (str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete str_;
-  }
-  if (str) {
+  if (str != NULL) {
     set_has_str();
-    str_ = str;
   } else {
     clear_has_str();
-    str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   }
+  str_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), str);
   // @@protoc_insertion_point(field_set_allocated:tests.Message.str)
 }
 
 // required bytes bytes = 2;
 inline bool Message::has_bytes() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
+  return (_has_bits_[0] & 0x00000002u) != 0;
 }
 inline void Message::set_has_bytes() {
-  _has_bits_[0] |= 0x00000004u;
+  _has_bits_[0] |= 0x00000002u;
 }
 inline void Message::clear_has_bytes() {
-  _has_bits_[0] &= ~0x00000004u;
+  _has_bits_[0] &= ~0x00000002u;
 }
 inline void Message::clear_bytes() {
-  if (bytes_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    bytes_->clear();
-  }
+  bytes_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   clear_has_bytes();
 }
 inline const ::std::string& Message::bytes() const {
   // @@protoc_insertion_point(field_get:tests.Message.bytes)
-  return *bytes_;
+  return bytes_.GetNoArena();
 }
 inline void Message::set_bytes(const ::std::string& value) {
   set_has_bytes();
-  if (bytes_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    bytes_ = new ::std::string;
-  }
-  bytes_->assign(value);
+  bytes_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
   // @@protoc_insertion_point(field_set:tests.Message.bytes)
 }
+#if LANG_CXX11
+inline void Message::set_bytes(::std::string&& value) {
+  set_has_bytes();
+  bytes_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tests.Message.bytes)
+}
+#endif
 inline void Message::set_bytes(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   set_has_bytes();
-  if (bytes_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    bytes_ = new ::std::string;
-  }
-  bytes_->assign(value);
+  bytes_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
   // @@protoc_insertion_point(field_set_char:tests.Message.bytes)
 }
 inline void Message::set_bytes(const void* value, size_t size) {
   set_has_bytes();
-  if (bytes_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    bytes_ = new ::std::string;
-  }
-  bytes_->assign(reinterpret_cast<const char*>(value), size);
+  bytes_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
   // @@protoc_insertion_point(field_set_pointer:tests.Message.bytes)
 }
 inline ::std::string* Message::mutable_bytes() {
   set_has_bytes();
-  if (bytes_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    bytes_ = new ::std::string;
-  }
   // @@protoc_insertion_point(field_mutable:tests.Message.bytes)
-  return bytes_;
+  return bytes_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline ::std::string* Message::release_bytes() {
+  // @@protoc_insertion_point(field_release:tests.Message.bytes)
   clear_has_bytes();
-  if (bytes_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = bytes_;
-    bytes_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
+  return bytes_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 inline void Message::set_allocated_bytes(::std::string* bytes) {
-  if (bytes_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete bytes_;
-  }
-  if (bytes) {
+  if (bytes != NULL) {
     set_has_bytes();
-    bytes_ = bytes;
   } else {
     clear_has_bytes();
-    bytes_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   }
+  bytes_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), bytes);
   // @@protoc_insertion_point(field_set_allocated:tests.Message.bytes)
 }
 
 // optional int32 int32 = 3;
 inline bool Message::has_int32() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
+  return (_has_bits_[0] & 0x00000010u) != 0;
 }
 inline void Message::set_has_int32() {
-  _has_bits_[0] |= 0x00000008u;
+  _has_bits_[0] |= 0x00000010u;
 }
 inline void Message::clear_has_int32() {
-  _has_bits_[0] &= ~0x00000008u;
+  _has_bits_[0] &= ~0x00000010u;
 }
 inline void Message::clear_int32() {
   int32_ = 0;
@@ -1305,13 +1373,13 @@ inline void Message::set_int32(::google::protobuf::int32 value) {
 
 // optional int64 int64 = 4;
 inline bool Message::has_int64() const {
-  return (_has_bits_[0] & 0x00000010u) != 0;
+  return (_has_bits_[0] & 0x00000008u) != 0;
 }
 inline void Message::set_has_int64() {
-  _has_bits_[0] |= 0x00000010u;
+  _has_bits_[0] |= 0x00000008u;
 }
 inline void Message::clear_has_int64() {
-  _has_bits_[0] &= ~0x00000010u;
+  _has_bits_[0] &= ~0x00000008u;
 }
 inline void Message::clear_int64() {
   int64_ = GOOGLE_LONGLONG(0);
@@ -1377,13 +1445,13 @@ inline void Message::set_uint64(::google::protobuf::uint64 value) {
 
 // optional sint32 sint32 = 7;
 inline bool Message::has_sint32() const {
-  return (_has_bits_[0] & 0x00000080u) != 0;
+  return (_has_bits_[0] & 0x00000100u) != 0;
 }
 inline void Message::set_has_sint32() {
-  _has_bits_[0] |= 0x00000080u;
+  _has_bits_[0] |= 0x00000100u;
 }
 inline void Message::clear_has_sint32() {
-  _has_bits_[0] &= ~0x00000080u;
+  _has_bits_[0] &= ~0x00000100u;
 }
 inline void Message::clear_sint32() {
   sint32_ = 0;
@@ -1401,13 +1469,13 @@ inline void Message::set_sint32(::google::protobuf::int32 value) {
 
 // optional sint64 sint64 = 8;
 inline bool Message::has_sint64() const {
-  return (_has_bits_[0] & 0x00000100u) != 0;
+  return (_has_bits_[0] & 0x00000080u) != 0;
 }
 inline void Message::set_has_sint64() {
-  _has_bits_[0] |= 0x00000100u;
+  _has_bits_[0] |= 0x00000080u;
 }
 inline void Message::clear_has_sint64() {
-  _has_bits_[0] &= ~0x00000100u;
+  _has_bits_[0] &= ~0x00000080u;
 }
 inline void Message::clear_sint64() {
   sint64_ = GOOGLE_LONGLONG(0);
@@ -1473,13 +1541,13 @@ inline void Message::set_d(double value) {
 
 // required .tests.Enum e = 11;
 inline bool Message::has_e() const {
-  return (_has_bits_[0] & 0x00000800u) != 0;
+  return (_has_bits_[0] & 0x00002000u) != 0;
 }
 inline void Message::set_has_e() {
-  _has_bits_[0] |= 0x00000800u;
+  _has_bits_[0] |= 0x00002000u;
 }
 inline void Message::clear_has_e() {
-  _has_bits_[0] &= ~0x00000800u;
+  _has_bits_[0] &= ~0x00002000u;
 }
 inline void Message::clear_e() {
   e_ = 1;
@@ -1498,13 +1566,13 @@ inline void Message::set_e(::tests::Enum value) {
 
 // required .tests.Nested nested = 12;
 inline bool Message::has_nested() const {
-  return (_has_bits_[0] & 0x00001000u) != 0;
+  return (_has_bits_[0] & 0x00000004u) != 0;
 }
 inline void Message::set_has_nested() {
-  _has_bits_[0] |= 0x00001000u;
+  _has_bits_[0] |= 0x00000004u;
 }
 inline void Message::clear_has_nested() {
-  _has_bits_[0] &= ~0x00001000u;
+  _has_bits_[0] &= ~0x00000004u;
 }
 inline void Message::clear_nested() {
   if (nested_ != NULL) nested_->::tests::Nested::Clear();
@@ -1512,15 +1580,19 @@ inline void Message::clear_nested() {
 }
 inline const ::tests::Nested& Message::nested() const {
   // @@protoc_insertion_point(field_get:tests.Message.nested)
-  return nested_ != NULL ? *nested_ : *default_instance_->nested_;
+  return nested_ != NULL ? *nested_
+                         : *::tests::Nested::internal_default_instance();
 }
 inline ::tests::Nested* Message::mutable_nested() {
   set_has_nested();
-  if (nested_ == NULL) nested_ = new ::tests::Nested;
+  if (nested_ == NULL) {
+    nested_ = new ::tests::Nested;
+  }
   // @@protoc_insertion_point(field_mutable:tests.Message.nested)
   return nested_;
 }
 inline ::tests::Nested* Message::release_nested() {
+  // @@protoc_insertion_point(field_release:tests.Message.nested)
   clear_has_nested();
   ::tests::Nested* temp = nested_;
   nested_ = NULL;
@@ -1586,7 +1658,14 @@ inline void Message::set_repeated_string(int index, const ::std::string& value)
   // @@protoc_insertion_point(field_set:tests.Message.repeated_string)
   repeated_string_.Mutable(index)->assign(value);
 }
+#if LANG_CXX11
+inline void Message::set_repeated_string(int index, ::std::string&& value) {
+  // @@protoc_insertion_point(field_set:tests.Message.repeated_string)
+  repeated_string_.Mutable(index)->assign(std::move(value));
+}
+#endif
 inline void Message::set_repeated_string(int index, const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   repeated_string_.Mutable(index)->assign(value);
   // @@protoc_insertion_point(field_set_char:tests.Message.repeated_string)
 }
@@ -1596,13 +1675,21 @@ inline void Message::set_repeated_string(int index, const char* value, size_t si
   // @@protoc_insertion_point(field_set_pointer:tests.Message.repeated_string)
 }
 inline ::std::string* Message::add_repeated_string() {
+  // @@protoc_insertion_point(field_add_mutable:tests.Message.repeated_string)
   return repeated_string_.Add();
 }
 inline void Message::add_repeated_string(const ::std::string& value) {
   repeated_string_.Add()->assign(value);
   // @@protoc_insertion_point(field_add:tests.Message.repeated_string)
 }
+#if LANG_CXX11
+inline void Message::add_repeated_string(::std::string&& value) {
+  repeated_string_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:tests.Message.repeated_string)
+}
+#endif
 inline void Message::add_repeated_string(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   repeated_string_.Add()->assign(value);
   // @@protoc_insertion_point(field_add_char:tests.Message.repeated_string)
 }
@@ -1640,7 +1727,14 @@ inline void Message::set_repeated_bytes(int index, const ::std::string& value) {
   // @@protoc_insertion_point(field_set:tests.Message.repeated_bytes)
   repeated_bytes_.Mutable(index)->assign(value);
 }
+#if LANG_CXX11
+inline void Message::set_repeated_bytes(int index, ::std::string&& value) {
+  // @@protoc_insertion_point(field_set:tests.Message.repeated_bytes)
+  repeated_bytes_.Mutable(index)->assign(std::move(value));
+}
+#endif
 inline void Message::set_repeated_bytes(int index, const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   repeated_bytes_.Mutable(index)->assign(value);
   // @@protoc_insertion_point(field_set_char:tests.Message.repeated_bytes)
 }
@@ -1650,13 +1744,21 @@ inline void Message::set_repeated_bytes(int index, const void* value, size_t siz
   // @@protoc_insertion_point(field_set_pointer:tests.Message.repeated_bytes)
 }
 inline ::std::string* Message::add_repeated_bytes() {
+  // @@protoc_insertion_point(field_add_mutable:tests.Message.repeated_bytes)
   return repeated_bytes_.Add();
 }
 inline void Message::add_repeated_bytes(const ::std::string& value) {
   repeated_bytes_.Add()->assign(value);
   // @@protoc_insertion_point(field_add:tests.Message.repeated_bytes)
 }
+#if LANG_CXX11
+inline void Message::add_repeated_bytes(::std::string&& value) {
+  repeated_bytes_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:tests.Message.repeated_bytes)
+}
+#endif
 inline void Message::add_repeated_bytes(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   repeated_bytes_.Add()->assign(value);
   // @@protoc_insertion_point(field_add_char:tests.Message.repeated_bytes)
 }
@@ -1966,16 +2068,16 @@ inline ::tests::Nested* Message::add_repeated_nested() {
   // @@protoc_insertion_point(field_add:tests.Message.repeated_nested)
   return repeated_nested_.Add();
 }
-inline const ::google::protobuf::RepeatedPtrField< ::tests::Nested >&
-Message::repeated_nested() const {
-  // @@protoc_insertion_point(field_list:tests.Message.repeated_nested)
-  return repeated_nested_;
-}
 inline ::google::protobuf::RepeatedPtrField< ::tests::Nested >*
 Message::mutable_repeated_nested() {
   // @@protoc_insertion_point(field_mutable_list:tests.Message.repeated_nested)
   return &repeated_nested_;
 }
+inline const ::google::protobuf::RepeatedPtrField< ::tests::Nested >&
+Message::repeated_nested() const {
+  // @@protoc_insertion_point(field_list:tests.Message.repeated_nested)
+  return repeated_nested_;
+}
 
 // repeated string empty = 25;
 inline int Message::empty_size() const {
@@ -1996,7 +2098,14 @@ inline void Message::set_empty(int index, const ::std::string& value) {
   // @@protoc_insertion_point(field_set:tests.Message.empty)
   empty_.Mutable(index)->assign(value);
 }
+#if LANG_CXX11
+inline void Message::set_empty(int index, ::std::string&& value) {
+  // @@protoc_insertion_point(field_set:tests.Message.empty)
+  empty_.Mutable(index)->assign(std::move(value));
+}
+#endif
 inline void Message::set_empty(int index, const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   empty_.Mutable(index)->assign(value);
   // @@protoc_insertion_point(field_set_char:tests.Message.empty)
 }
@@ -2006,13 +2115,21 @@ inline void Message::set_empty(int index, const char* value, size_t size) {
   // @@protoc_insertion_point(field_set_pointer:tests.Message.empty)
 }
 inline ::std::string* Message::add_empty() {
+  // @@protoc_insertion_point(field_add_mutable:tests.Message.empty)
   return empty_.Add();
 }
 inline void Message::add_empty(const ::std::string& value) {
   empty_.Add()->assign(value);
   // @@protoc_insertion_point(field_add:tests.Message.empty)
 }
+#if LANG_CXX11
+inline void Message::add_empty(::std::string&& value) {
+  empty_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:tests.Message.empty)
+}
+#endif
 inline void Message::add_empty(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
   empty_.Add()->assign(value);
   // @@protoc_insertion_point(field_add_char:tests.Message.empty)
 }
@@ -2033,13 +2150,13 @@ Message::mutable_empty() {
 
 // optional double optional_default = 28 [default = 42];
 inline bool Message::has_optional_default() const {
-  return (_has_bits_[0] & 0x08000000u) != 0;
+  return (_has_bits_[0] & 0x00004000u) != 0;
 }
 inline void Message::set_has_optional_default() {
-  _has_bits_[0] |= 0x08000000u;
+  _has_bits_[0] |= 0x00004000u;
 }
 inline void Message::clear_has_optional_default() {
-  _has_bits_[0] &= ~0x08000000u;
+  _has_bits_[0] &= ~0x00004000u;
 }
 inline void Message::clear_optional_default() {
   optional_default_ = 42;
@@ -2057,13 +2174,13 @@ inline void Message::set_optional_default(double value) {
 
 // optional double optional_no_default = 29;
 inline bool Message::has_optional_no_default() const {
-  return (_has_bits_[0] & 0x10000000u) != 0;
+  return (_has_bits_[0] & 0x00000800u) != 0;
 }
 inline void Message::set_has_optional_no_default() {
-  _has_bits_[0] |= 0x10000000u;
+  _has_bits_[0] |= 0x00000800u;
 }
 inline void Message::clear_has_optional_no_default() {
-  _has_bits_[0] &= ~0x10000000u;
+  _has_bits_[0] &= ~0x00000800u;
 }
 inline void Message::clear_optional_no_default() {
   optional_no_default_ = 0;
@@ -2102,20 +2219,28 @@ inline ::tests::SimpleMessage* ArrayMessage::add_values() {
   // @@protoc_insertion_point(field_add:tests.ArrayMessage.values)
   return values_.Add();
 }
-inline const ::google::protobuf::RepeatedPtrField< ::tests::SimpleMessage >&
-ArrayMessage::values() const {
-  // @@protoc_insertion_point(field_list:tests.ArrayMessage.values)
-  return values_;
-}
 inline ::google::protobuf::RepeatedPtrField< ::tests::SimpleMessage >*
 ArrayMessage::mutable_values() {
   // @@protoc_insertion_point(field_mutable_list:tests.ArrayMessage.values)
   return &values_;
 }
+inline const ::google::protobuf::RepeatedPtrField< ::tests::SimpleMessage >&
+ArrayMessage::values() const {
+  // @@protoc_insertion_point(field_list:tests.ArrayMessage.values)
+  return values_;
+}
+
+#endif  // !PROTOBUF_INLINE_NOT_IN_HEADERS
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
 
 
 // @@protoc_insertion_point(namespace_scope)
 
+
 }  // namespace tests
 
 #ifndef SWIG
@@ -2128,8 +2253,8 @@ inline const EnumDescriptor* GetEnumDescriptor< ::tests::Enum>() {
   return ::tests::Enum_descriptor();
 }
 
-}  // namespace google
 }  // namespace protobuf
+}  // namespace google
 #endif  // SWIG
 
 // @@protoc_insertion_point(global_scope)


[7/9] mesos git commit: Updated Mesos build library to use protobuf 3.3.0.

Posted by an...@apache.org.
Updated Mesos build library to use protobuf 3.3.0.

Review: https://reviews.apache.org/r/58359/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/34519334
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/34519334
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/34519334

Branch: refs/heads/master
Commit: 34519334dd88b802cb6a7c6a664fa9280f93d828
Parents: 8eacd7c
Author: Zhitao Li <zh...@gmail.com>
Authored: Fri May 26 10:00:04 2017 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Fri May 26 10:00:04 2017 -0700

----------------------------------------------------------------------
 configure.ac                               | 2 +-
 src/java/mesos.pom.in                      | 2 +-
 src/python/interface/setup.py.in           | 2 +-
 src/python/native_common/ext_modules.py.in | 2 +-
 src/python/protocol/setup.py.in            | 2 +-
 support/mesos-tidy/entrypoint.sh           | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/34519334/configure.ac
----------------------------------------------------------------------
diff --git a/configure.ac b/configure.ac
index aa6d1eb..cf6080e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1458,7 +1458,7 @@ correct if youre already doing this.
   fi
 else
   with_bundled_protobuf=yes
-  PROTOBUF_JAR="\${MESOS_BUILD_DIR}/src/java/target/protobuf-java-2.6.1.jar"
+  PROTOBUF_JAR="\${MESOS_BUILD_DIR}/src/java/target/protobuf-java-3.3.0.jar"
 fi
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/34519334/src/java/mesos.pom.in
----------------------------------------------------------------------
diff --git a/src/java/mesos.pom.in b/src/java/mesos.pom.in
index 080767f..5642883 100644
--- a/src/java/mesos.pom.in
+++ b/src/java/mesos.pom.in
@@ -83,7 +83,7 @@
     <dependency>
       <artifactId>protobuf-java</artifactId>
       <groupId>com.google.protobuf</groupId>
-      <version>2.6.1</version>
+      <version>3.3.0</version>
     </dependency>
   </dependencies>
   <build>

http://git-wip-us.apache.org/repos/asf/mesos/blob/34519334/src/python/interface/setup.py.in
----------------------------------------------------------------------
diff --git a/src/python/interface/setup.py.in b/src/python/interface/setup.py.in
index 8e38f3f..abf160c 100644
--- a/src/python/interface/setup.py.in
+++ b/src/python/interface/setup.py.in
@@ -26,7 +26,7 @@ config = {
     'namespace_packages': [ 'mesos' ],
     'packages': [ 'mesos', 'mesos.interface' ],
     'package_dir': { '': 'src' },
-    'install_requires': [ 'google-common>=0.0.1', 'protobuf>=2.6.1,<4' ],
+    'install_requires': [ 'google-common>=0.0.1', 'protobuf>=3.3.0,<4' ],
     'license': 'Apache 2.0',
     'keywords': 'mesos',
     'classifiers': [ ]

http://git-wip-us.apache.org/repos/asf/mesos/blob/34519334/src/python/native_common/ext_modules.py.in
----------------------------------------------------------------------
diff --git a/src/python/native_common/ext_modules.py.in b/src/python/native_common/ext_modules.py.in
index e0bb335..39e0faa 100644
--- a/src/python/native_common/ext_modules.py.in
+++ b/src/python/native_common/ext_modules.py.in
@@ -43,7 +43,7 @@ def _create_module(module_name):
     # libev.a and libprofiler.a).
     glog = os.path.join('3rdparty', 'glog-0.3.3')
     gperftools = os.path.join('3rdparty', 'gperftools-2.5')
-    protobuf = os.path.join('3rdparty', 'protobuf-2.6.1')
+    protobuf = os.path.join('3rdparty', 'protobuf-3.3.0')
 
     # Build the list of source files. Note that each source must be
     # relative to our current directory (where this script lives).

http://git-wip-us.apache.org/repos/asf/mesos/blob/34519334/src/python/protocol/setup.py.in
----------------------------------------------------------------------
diff --git a/src/python/protocol/setup.py.in b/src/python/protocol/setup.py.in
index b7de10a..0fa0c17 100644
--- a/src/python/protocol/setup.py.in
+++ b/src/python/protocol/setup.py.in
@@ -26,7 +26,7 @@ config = {
     'namespace_packages': [ 'mesos' ],
     'packages': [ 'mesos', 'mesos.protocol' ],
     'package_dir': { '': 'src' },
-    'install_requires': [ 'protobuf>=2.6.1,<4' ],
+    'install_requires': [ 'protobuf>=3.3.0,<4' ],
     'license': 'Apache 2.0',
     'keywords': 'mesos',
     'classifiers': [ ]

http://git-wip-us.apache.org/repos/asf/mesos/blob/34519334/support/mesos-tidy/entrypoint.sh
----------------------------------------------------------------------
diff --git a/support/mesos-tidy/entrypoint.sh b/support/mesos-tidy/entrypoint.sh
index 5a7d85d..6ef7835 100755
--- a/support/mesos-tidy/entrypoint.sh
+++ b/support/mesos-tidy/entrypoint.sh
@@ -48,7 +48,7 @@ cmake --build 3rdparty --target libevent-2.1.5-beta -- -j $(nproc) || true
 cmake --build 3rdparty --target leveldb-1.19 -- -j $(nproc)
 cmake --build 3rdparty --target nvml-352.79 -- -j $(nproc)
 cmake --build 3rdparty --target picojson-1.3.0 -- -j $(nproc)
-cmake --build 3rdparty --target protobuf-2.6.1 -- -j $(nproc)
+cmake --build 3rdparty --target protobuf-3.3.0 -- -j $(nproc)
 cmake --build 3rdparty --target zookeeper-3.4.8 -- -j $(nproc)
 
 # Generate the protobuf definitions.


[8/9] mesos git commit: Added a test for evolving large protobuf message.

Posted by an...@apache.org.
Added a test for evolving large protobuf message.

Before protobuf 3.2.0, this test would fail because the 64MB limit
imposed by older versions of protobuf.

Review: https://reviews.apache.org/r/58360/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/a03c22a0
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/a03c22a0
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/a03c22a0

Branch: refs/heads/master
Commit: a03c22a067af55e4c9dfd0d471b020690a575b39
Parents: 3451933
Author: Zhitao Li <zh...@gmail.com>
Authored: Fri May 26 10:00:33 2017 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Fri May 26 10:01:55 2017 -0700

----------------------------------------------------------------------
 src/tests/protobuf_utils_tests.cpp | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/a03c22a0/src/tests/protobuf_utils_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/protobuf_utils_tests.cpp b/src/tests/protobuf_utils_tests.cpp
index 5239182..6ec3a8e 100644
--- a/src/tests/protobuf_utils_tests.cpp
+++ b/src/tests/protobuf_utils_tests.cpp
@@ -285,6 +285,31 @@ TEST(ProtobufUtilTest, AgentCapabilities)
   ASSERT_TRUE(capabilities.multiRole);
 }
 
+
+// Test large message evolve.
+// Before protobuf 3.3.0, this test would fail due to the 64MB limit
+// imposed by older version of protobuf.
+TEST(ProtobufUtilTest, LargeMessageEvolve)
+{
+  string data =
+    "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do "
+    "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim "
+    "ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut "
+    "aliquip ex ea commodo consequat. Duis aute irure dolor in "
+    "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla "
+    "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in "
+    "culpa qui officia deserunt mollit anim id est laborum.";
+
+  while (Bytes(data.size()) < Megabytes(70)) {
+    data.append(data);
+  }
+
+  ExecutorInfo executorInfo_;
+  executorInfo_.set_data(data);
+
+  evolve(executorInfo_);
+}
+
 } // namespace tests {
 } // namespace internal {
 } // namespace mesos {


[2/9] mesos git commit: Remove unnecessary patch after protobuf upgrade to 3.3.0.

Posted by an...@apache.org.
Remove unnecessary patch after protobuf upgrade to 3.3.0.

The patch should already be included in protobuf 3.0.0+, so
this is not necessary anymore.

Review: https://reviews.apache.org/r/58513/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/f680ff2c
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/f680ff2c
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/f680ff2c

Branch: refs/heads/master
Commit: f680ff2c7c2e2a20965c7fab9f1a5aa784f57bf0
Parents: 114599e
Author: Zhitao Li <zh...@gmail.com>
Authored: Fri May 26 09:39:25 2017 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Fri May 26 09:39:25 2017 -0700

----------------------------------------------------------------------
 3rdparty/CMakeLists.txt       |  2 --
 3rdparty/Makefile.am          |  5 -----
 3rdparty/protobuf-2.6.1.patch | 22 ----------------------
 3 files changed, 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/f680ff2c/3rdparty/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
index d8658f6..815bea3 100755
--- a/3rdparty/CMakeLists.txt
+++ b/3rdparty/CMakeLists.txt
@@ -310,7 +310,6 @@ elseif (WIN32)
 endif (NOT WIN32)
 
 if (NOT WIN32)
-  PATCH_CMD(${MESOS_3RDPARTY_SRC}/protobuf-${PROTOBUF_VERSION}.patch PROTOBUF_PATCH_CMD)
   set(PROTOBUF_CONFIG_CMD  ${PROTOBUF_ROOT}/src/../configure --prefix=${PROTOBUF_LIB_ROOT})
   set(PROTOBUF_BUILD_CMD   make)
   set(PROTOBUF_INSTALL_CMD make install)
@@ -341,7 +340,6 @@ ExternalProject_Add(
   ${PROTOBUF_TARGET}
   PREFIX            ${PROTOBUF_CMAKE_ROOT}
   CMAKE_ARGS        -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -DCMAKE_CXX_FLAGS_DEBUG="/MTd"
-  PATCH_COMMAND     ${PROTOBUF_PATCH_CMD}
   CONFIGURE_COMMAND ${PROTOBUF_CONFIG_CMD}
   BUILD_COMMAND     ${PROTOBUF_BUILD_CMD}
   INSTALL_COMMAND   ${PROTOBUF_INSTALL_CMD}

http://git-wip-us.apache.org/repos/asf/mesos/blob/f680ff2c/3rdparty/Makefile.am
----------------------------------------------------------------------
diff --git a/3rdparty/Makefile.am b/3rdparty/Makefile.am
index 31eb971..d5cc84c 100644
--- a/3rdparty/Makefile.am
+++ b/3rdparty/Makefile.am
@@ -95,11 +95,6 @@ EXTRA_DIST +=		\
 EXTRA_DIST +=		\
   $(LIBEV).patch
 
-# We include an upstream patch for protobuf in order to avoid
-# signed/unsigned comparisons.
-EXTRA_DIST +=		\
-  $(PROTOBUF).patch
-
 # We need to patch ZooKeeper in order to get 3.4.8 to compile on PPC LE.
 EXTRA_DIST +=		\
   $(ZOOKEEPER).patch

http://git-wip-us.apache.org/repos/asf/mesos/blob/f680ff2c/3rdparty/protobuf-2.6.1.patch
----------------------------------------------------------------------
diff --git a/3rdparty/protobuf-2.6.1.patch b/3rdparty/protobuf-2.6.1.patch
deleted file mode 100644
index bfd3bb2..0000000
--- a/3rdparty/protobuf-2.6.1.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 717f80749996ba97d050dd980a8e2ed97873d49e Mon Sep 17 00:00:00 2001
-From: abyss7 <ab...@gmail.com>
-Date: Mon, 3 Nov 2014 10:20:08 +0300
-Subject: [PATCH] Silence -Wsign-compare warning on Mac
-
----
- src/google/protobuf/wire_format_lite_inl.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/google/protobuf/wire_format_lite_inl.h b/src/google/protobuf/wire_format_lite_inl.h
-index 4e8ac9b..feb2254 100644
---- a/src/google/protobuf/wire_format_lite_inl.h
-+++ b/src/google/protobuf/wire_format_lite_inl.h
-@@ -380,7 +380,7 @@ inline bool WireFormatLite::ReadPackedFixedSizePrimitive(
- #else
-     values->Reserve(old_entries + new_entries);
-     CType value;
--    for (int i = 0; i < new_entries; ++i) {
-+    for (uint32 i = 0; i < new_entries; ++i) {
-       if (!ReadPrimitive<CType, DeclaredType>(input, &value)) return false;
-       values->AddAlreadyReserved(value);
-     }


[5/9] mesos git commit: Update related tests in stout to support protobuf 3.3.0.

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/mesos/blob/8eacd7c7/3rdparty/stout/tests/protobuf_tests.pb.cc
----------------------------------------------------------------------
diff --git a/3rdparty/stout/tests/protobuf_tests.pb.cc b/3rdparty/stout/tests/protobuf_tests.pb.cc
index b2458f0..ad6eff7 100644
--- a/3rdparty/stout/tests/protobuf_tests.pb.cc
+++ b/3rdparty/stout/tests/protobuf_tests.pb.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 
 #include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/port.h>
 #include <google/protobuf/stubs/once.h>
 #include <google/protobuf/io/coded_stream.h>
 #include <google/protobuf/wire_format_lite_inl.h>
@@ -17,213 +18,251 @@
 // @@protoc_insertion_point(includes)
 
 namespace tests {
+class NestedDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed<Nested> {
+} _Nested_default_instance_;
+class SimpleMessageDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed<SimpleMessage> {
+} _SimpleMessage_default_instance_;
+class MessageDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed<Message> {
+} _Message_default_instance_;
+class ArrayMessageDefaultTypeInternal : public ::google::protobuf::internal::ExplicitlyConstructed<ArrayMessage> {
+} _ArrayMessage_default_instance_;
+
+namespace protobuf_protobuf_5ftests_2eproto {
+
 
 namespace {
 
-const ::google::protobuf::Descriptor* Nested_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Nested_reflection_ = NULL;
-const ::google::protobuf::Descriptor* SimpleMessage_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  SimpleMessage_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Message_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Message_reflection_ = NULL;
-const ::google::protobuf::Descriptor* ArrayMessage_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  ArrayMessage_reflection_ = NULL;
-const ::google::protobuf::EnumDescriptor* Enum_descriptor_ = NULL;
+::google::protobuf::Metadata file_level_metadata[4];
+const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[1];
 
 }  // namespace
 
-
-void protobuf_AssignDesc_protobuf_5ftests_2eproto() {
-  protobuf_AddDesc_protobuf_5ftests_2eproto();
-  const ::google::protobuf::FileDescriptor* file =
-    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
-      "protobuf_tests.proto");
-  GOOGLE_CHECK(file != NULL);
-  Nested_descriptor_ = file->message_type(0);
-  static const int Nested_offsets_[3] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, str_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, optional_str_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, repeated_str_),
-  };
-  Nested_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Nested_descriptor_,
-      Nested::default_instance_,
-      Nested_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Nested));
-  SimpleMessage_descriptor_ = file->message_type(1);
-  static const int SimpleMessage_offsets_[2] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SimpleMessage, id_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SimpleMessage, numbers_),
-  };
-  SimpleMessage_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      SimpleMessage_descriptor_,
-      SimpleMessage::default_instance_,
-      SimpleMessage_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SimpleMessage, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SimpleMessage, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(SimpleMessage));
-  Message_descriptor_ = file->message_type(2);
-  static const int Message_offsets_[29] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, b_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, str_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, bytes_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, int32_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, int64_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, uint32_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, uint64_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, sint32_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, sint64_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, f_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, d_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, e_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, nested_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_bool_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_string_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_bytes_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_int32_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_int64_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_uint32_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_uint64_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_sint32_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_sint64_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_float_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_double_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_enum_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_nested_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, empty_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, optional_default_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, optional_no_default_),
-  };
-  Message_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Message_descriptor_,
-      Message::default_instance_,
-      Message_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Message));
-  ArrayMessage_descriptor_ = file->message_type(3);
-  static const int ArrayMessage_offsets_[1] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ArrayMessage, values_),
-  };
-  ArrayMessage_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      ArrayMessage_descriptor_,
-      ArrayMessage::default_instance_,
-      ArrayMessage_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ArrayMessage, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ArrayMessage, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(ArrayMessage));
-  Enum_descriptor_ = file->enum_type(0);
-}
+PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTableField
+    const TableStruct::entries[] = {
+  {0, 0, 0, ::google::protobuf::internal::kInvalidMask, 0, 0},
+};
+
+PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::AuxillaryParseTableField
+    const TableStruct::aux[] = {
+  ::google::protobuf::internal::AuxillaryParseTableField(),
+};
+PROTOBUF_CONSTEXPR_VAR ::google::protobuf::internal::ParseTable const
+    TableStruct::schema[] = {
+  { NULL, NULL, 0, -1, -1, false },
+  { NULL, NULL, 0, -1, -1, false },
+  { NULL, NULL, 0, -1, -1, false },
+  { NULL, NULL, 0, -1, -1, false },
+};
+
+const ::google::protobuf::uint32 TableStruct::offsets[] = {
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, _has_bits_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, str_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, optional_str_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Nested, repeated_str_),
+  0,
+  1,
+  ~0u,
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SimpleMessage, _has_bits_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SimpleMessage, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SimpleMessage, id_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(SimpleMessage, numbers_),
+  0,
+  ~0u,
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, _has_bits_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, b_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, str_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, bytes_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, int32_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, int64_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, uint32_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, uint64_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, sint32_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, sint64_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, f_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, d_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, e_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, nested_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_bool_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_string_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_bytes_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_int32_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_int64_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_uint32_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_uint64_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_sint32_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_sint64_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_float_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_double_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_enum_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, repeated_nested_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, empty_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, optional_default_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Message, optional_no_default_),
+  12,
+  0,
+  1,
+  4,
+  3,
+  5,
+  6,
+  8,
+  7,
+  9,
+  10,
+  13,
+  2,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  ~0u,
+  14,
+  11,
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ArrayMessage, _has_bits_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ArrayMessage, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ArrayMessage, values_),
+  ~0u,
+};
+
+static const ::google::protobuf::internal::MigrationSchema schemas[] = {
+  { 0, 8, sizeof(Nested)},
+  { 11, 18, sizeof(SimpleMessage)},
+  { 20, 54, sizeof(Message)},
+  { 83, 89, sizeof(ArrayMessage)},
+};
+
+static ::google::protobuf::Message const * const file_default_instances[] = {
+  reinterpret_cast<const ::google::protobuf::Message*>(&_Nested_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&_SimpleMessage_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&_Message_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&_ArrayMessage_default_instance_),
+};
 
 namespace {
 
-GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
-inline void protobuf_AssignDescriptorsOnce() {
-  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
-                 &protobuf_AssignDesc_protobuf_5ftests_2eproto);
+void protobuf_AssignDescriptors() {
+  AddDescriptors();
+  ::google::protobuf::MessageFactory* factory = NULL;
+  AssignDescriptors(
+      "protobuf_tests.proto", schemas, file_default_instances, TableStruct::offsets, factory,
+      file_level_metadata, file_level_enum_descriptors, NULL);
 }
 
+void protobuf_AssignDescriptorsOnce() {
+  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
+  ::google::protobuf::GoogleOnceInit(&once, &protobuf_AssignDescriptors);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) GOOGLE_ATTRIBUTE_COLD;
 void protobuf_RegisterTypes(const ::std::string&) {
   protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Nested_descriptor_, &Nested::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    SimpleMessage_descriptor_, &SimpleMessage::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Message_descriptor_, &Message::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    ArrayMessage_descriptor_, &ArrayMessage::default_instance());
+  ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 4);
 }
 
 }  // namespace
 
-void protobuf_ShutdownFile_protobuf_5ftests_2eproto() {
-  delete Nested::default_instance_;
-  delete Nested_reflection_;
-  delete SimpleMessage::default_instance_;
-  delete SimpleMessage_reflection_;
-  delete Message::default_instance_;
-  delete Message_reflection_;
-  delete ArrayMessage::default_instance_;
-  delete ArrayMessage_reflection_;
-}
-
-void protobuf_AddDesc_protobuf_5ftests_2eproto() {
-  static bool already_here = false;
-  if (already_here) return;
-  already_here = true;
+void TableStruct::Shutdown() {
+  _Nested_default_instance_.Shutdown();
+  delete file_level_metadata[0].reflection;
+  _SimpleMessage_default_instance_.Shutdown();
+  delete file_level_metadata[1].reflection;
+  _Message_default_instance_.Shutdown();
+  delete file_level_metadata[2].reflection;
+  _ArrayMessage_default_instance_.Shutdown();
+  delete file_level_metadata[3].reflection;
+}
+
+void TableStruct::InitDefaultsImpl() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
 
+  ::google::protobuf::internal::InitProtobufDefaults();
+  _Nested_default_instance_.DefaultConstruct();
+  _SimpleMessage_default_instance_.DefaultConstruct();
+  _Message_default_instance_.DefaultConstruct();
+  _ArrayMessage_default_instance_.DefaultConstruct();
+  _Message_default_instance_.get_mutable()->nested_ = const_cast< ::tests::Nested*>(
+      ::tests::Nested::internal_default_instance());
+}
+
+void InitDefaults() {
+  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
+  ::google::protobuf::GoogleOnceInit(&once, &TableStruct::InitDefaultsImpl);
+}
+void AddDescriptorsImpl() {
+  InitDefaults();
+  static const char descriptor[] = {
+      "\n\024protobuf_tests.proto\022\005tests\"A\n\006Nested\022"
+      "\013\n\003str\030\001 \002(\t\022\024\n\014optional_str\030\002 \001(\t\022\024\n\014re"
+      "peated_str\030\003 \003(\t\",\n\rSimpleMessage\022\n\n\002id\030"
+      "\001 \002(\t\022\017\n\007numbers\030\002 \003(\005\"\376\004\n\007Message\022\t\n\001b\030"
+      "\032 \002(\010\022\013\n\003str\030\001 \002(\t\022\r\n\005bytes\030\002 \002(\014\022\r\n\005int"
+      "32\030\003 \001(\005\022\r\n\005int64\030\004 \001(\003\022\016\n\006uint32\030\005 \001(\r\022"
+      "\016\n\006uint64\030\006 \001(\004\022\016\n\006sint32\030\007 \001(\021\022\016\n\006sint6"
+      "4\030\010 \001(\022\022\t\n\001f\030\t \002(\002\022\t\n\001d\030\n \002(\001\022\026\n\001e\030\013 \002(\016"
+      "2\013.tests.Enum\022\035\n\006nested\030\014 \002(\0132\r.tests.Ne"
+      "sted\022\025\n\rrepeated_bool\030\033 \003(\010\022\027\n\017repeated_"
+      "string\030\r \003(\t\022\026\n\016repeated_bytes\030\016 \003(\014\022\026\n\016"
+      "repeated_int32\030\017 \003(\005\022\026\n\016repeated_int64\030\020"
+      " \003(\003\022\027\n\017repeated_uint32\030\021 \003(\r\022\027\n\017repeate"
+      "d_uint64\030\022 \003(\004\022\027\n\017repeated_sint32\030\023 \003(\021\022"
+      "\027\n\017repeated_sint64\030\024 \003(\022\022\026\n\016repeated_flo"
+      "at\030\025 \003(\002\022\027\n\017repeated_double\030\026 \003(\001\022\"\n\rrep"
+      "eated_enum\030\027 \003(\0162\013.tests.Enum\022&\n\017repeate"
+      "d_nested\030\030 \003(\0132\r.tests.Nested\022\r\n\005empty\030\031"
+      " \003(\t\022\034\n\020optional_default\030\034 \001(\001:\00242\022\033\n\023op"
+      "tional_no_default\030\035 \001(\001\"4\n\014ArrayMessage\022"
+      "$\n\006values\030\001 \003(\0132\024.tests.SimpleMessage*\030\n"
+      "\004Enum\022\007\n\003ONE\020\001\022\007\n\003TWO\020\002"
+  };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-    "\n\024protobuf_tests.proto\022\005tests\"A\n\006Nested\022"
-    "\013\n\003str\030\001 \002(\t\022\024\n\014optional_str\030\002 \001(\t\022\024\n\014re"
-    "peated_str\030\003 \003(\t\",\n\rSimpleMessage\022\n\n\002id\030"
-    "\001 \002(\t\022\017\n\007numbers\030\002 \003(\005\"\376\004\n\007Message\022\t\n\001b\030"
-    "\032 \002(\010\022\013\n\003str\030\001 \002(\t\022\r\n\005bytes\030\002 \002(\014\022\r\n\005int"
-    "32\030\003 \001(\005\022\r\n\005int64\030\004 \001(\003\022\016\n\006uint32\030\005 \001(\r\022"
-    "\016\n\006uint64\030\006 \001(\004\022\016\n\006sint32\030\007 \001(\021\022\016\n\006sint6"
-    "4\030\010 \001(\022\022\t\n\001f\030\t \002(\002\022\t\n\001d\030\n \002(\001\022\026\n\001e\030\013 \002(\016"
-    "2\013.tests.Enum\022\035\n\006nested\030\014 \002(\0132\r.tests.Ne"
-    "sted\022\025\n\rrepeated_bool\030\033 \003(\010\022\027\n\017repeated_"
-    "string\030\r \003(\t\022\026\n\016repeated_bytes\030\016 \003(\014\022\026\n\016"
-    "repeated_int32\030\017 \003(\005\022\026\n\016repeated_int64\030\020"
-    " \003(\003\022\027\n\017repeated_uint32\030\021 \003(\r\022\027\n\017repeate"
-    "d_uint64\030\022 \003(\004\022\027\n\017repeated_sint32\030\023 \003(\021\022"
-    "\027\n\017repeated_sint64\030\024 \003(\022\022\026\n\016repeated_flo"
-    "at\030\025 \003(\002\022\027\n\017repeated_double\030\026 \003(\001\022\"\n\rrep"
-    "eated_enum\030\027 \003(\0162\013.tests.Enum\022&\n\017repeate"
-    "d_nested\030\030 \003(\0132\r.tests.Nested\022\r\n\005empty\030\031"
-    " \003(\t\022\034\n\020optional_default\030\034 \001(\001:\00242\022\033\n\023op"
-    "tional_no_default\030\035 \001(\001\"4\n\014ArrayMessage\022"
-    "$\n\006values\030\001 \003(\0132\024.tests.SimpleMessage*\030\n"
-    "\004Enum\022\007\n\003ONE\020\001\022\007\n\003TWO\020\002", 863);
+      descriptor, 863);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "protobuf_tests.proto", &protobuf_RegisterTypes);
-  Nested::default_instance_ = new Nested();
-  SimpleMessage::default_instance_ = new SimpleMessage();
-  Message::default_instance_ = new Message();
-  ArrayMessage::default_instance_ = new ArrayMessage();
-  Nested::default_instance_->InitAsDefaultInstance();
-  SimpleMessage::default_instance_->InitAsDefaultInstance();
-  Message::default_instance_->InitAsDefaultInstance();
-  ArrayMessage::default_instance_->InitAsDefaultInstance();
-  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_protobuf_5ftests_2eproto);
+  ::google::protobuf::internal::OnShutdown(&TableStruct::Shutdown);
 }
 
+void AddDescriptors() {
+  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
+  ::google::protobuf::GoogleOnceInit(&once, &AddDescriptorsImpl);
+}
 // Force AddDescriptors() to be called at static initialization time.
-struct StaticDescriptorInitializer_protobuf_5ftests_2eproto {
-  StaticDescriptorInitializer_protobuf_5ftests_2eproto() {
-    protobuf_AddDesc_protobuf_5ftests_2eproto();
+struct StaticDescriptorInitializer {
+  StaticDescriptorInitializer() {
+    AddDescriptors();
   }
-} static_descriptor_initializer_protobuf_5ftests_2eproto_;
+} static_descriptor_initializer;
+
+}  // namespace protobuf_protobuf_5ftests_2eproto
+
 const ::google::protobuf::EnumDescriptor* Enum_descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Enum_descriptor_;
+  protobuf_protobuf_5ftests_2eproto::protobuf_AssignDescriptorsOnce();
+  return protobuf_protobuf_5ftests_2eproto::file_level_enum_descriptors[0];
 }
 bool Enum_IsValid(int value) {
-  switch(value) {
+  switch (value) {
     case 1:
     case 2:
       return true;
@@ -235,34 +274,42 @@ bool Enum_IsValid(int value) {
 
 // ===================================================================
 
-#ifndef _MSC_VER
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
 const int Nested::kStrFieldNumber;
 const int Nested::kOptionalStrFieldNumber;
 const int Nested::kRepeatedStrFieldNumber;
-#endif  // !_MSC_VER
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 Nested::Nested()
-  : ::google::protobuf::Message() {
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
+    protobuf_protobuf_5ftests_2eproto::InitDefaults();
+  }
   SharedCtor();
   // @@protoc_insertion_point(constructor:tests.Nested)
 }
-
-void Nested::InitAsDefaultInstance() {
-}
-
 Nested::Nested(const Nested& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL),
+      _has_bits_(from._has_bits_),
+      _cached_size_(0),
+      repeated_str_(from.repeated_str_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.has_str()) {
+    str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.str_);
+  }
+  optional_str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.has_optional_str()) {
+    optional_str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.optional_str_);
+  }
   // @@protoc_insertion_point(copy_constructor:tests.Nested)
 }
 
 void Nested::SharedCtor() {
-  ::google::protobuf::internal::GetEmptyString();
   _cached_size_ = 0;
-  str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  optional_str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  optional_str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 
 Nested::~Nested() {
@@ -271,14 +318,8 @@ Nested::~Nested() {
 }
 
 void Nested::SharedDtor() {
-  if (str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete str_;
-  }
-  if (optional_str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete optional_str_;
-  }
-  if (this != default_instance_) {
-  }
+  str_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  optional_str_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 
 void Nested::SetCachedSize(int size) const {
@@ -287,98 +328,96 @@ void Nested::SetCachedSize(int size) const {
   GOOGLE_SAFE_CONCURRENT_WRITES_END();
 }
 const ::google::protobuf::Descriptor* Nested::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Nested_descriptor_;
+  protobuf_protobuf_5ftests_2eproto::protobuf_AssignDescriptorsOnce();
+  return protobuf_protobuf_5ftests_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
 }
 
 const Nested& Nested::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_protobuf_5ftests_2eproto();
-  return *default_instance_;
+  protobuf_protobuf_5ftests_2eproto::InitDefaults();
+  return *internal_default_instance();
 }
 
-Nested* Nested::default_instance_ = NULL;
-
-Nested* Nested::New() const {
-  return new Nested;
+Nested* Nested::New(::google::protobuf::Arena* arena) const {
+  Nested* n = new Nested;
+  if (arena != NULL) {
+    arena->Own(n);
+  }
+  return n;
 }
 
 void Nested::Clear() {
-  if (_has_bits_[0 / 32] & 3) {
+// @@protoc_insertion_point(message_clear_start:tests.Nested)
+  repeated_str_.Clear();
+  if (_has_bits_[0 / 32] & 3u) {
     if (has_str()) {
-      if (str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-        str_->clear();
-      }
+      GOOGLE_DCHECK(!str_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()));
+      (*str_.UnsafeRawStringPointer())->clear();
     }
     if (has_optional_str()) {
-      if (optional_str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-        optional_str_->clear();
-      }
+      GOOGLE_DCHECK(!optional_str_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()));
+      (*optional_str_.UnsafeRawStringPointer())->clear();
     }
   }
-  repeated_str_.Clear();
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
+  _has_bits_.Clear();
+  _internal_metadata_.Clear();
 }
 
 bool Nested::MergePartialFromCodedStream(
     ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
   ::google::protobuf::uint32 tag;
   // @@protoc_insertion_point(parse_start:tests.Nested)
   for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
+    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
     tag = p.first;
     if (!p.second) goto handle_unusual;
     switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
       // required string str = 1;
       case 1: {
-        if (tag == 10) {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                 input, this->mutable_str()));
           ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
             this->str().data(), this->str().length(),
             ::google::protobuf::internal::WireFormat::PARSE,
-            "str");
+            "tests.Nested.str");
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(18)) goto parse_optional_str;
         break;
       }
 
       // optional string optional_str = 2;
       case 2: {
-        if (tag == 18) {
-         parse_optional_str:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(18u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                 input, this->mutable_optional_str()));
           ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
             this->optional_str().data(), this->optional_str().length(),
             ::google::protobuf::internal::WireFormat::PARSE,
-            "optional_str");
+            "tests.Nested.optional_str");
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(26)) goto parse_repeated_str;
         break;
       }
 
       // repeated string repeated_str = 3;
       case 3: {
-        if (tag == 26) {
-         parse_repeated_str:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(26u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                 input, this->add_repeated_str()));
           ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
             this->repeated_str(this->repeated_str_size() - 1).data(),
             this->repeated_str(this->repeated_str_size() - 1).length(),
             ::google::protobuf::internal::WireFormat::PARSE,
-            "repeated_str");
+            "tests.Nested.repeated_str");
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(26)) goto parse_repeated_str;
-        if (input->ExpectAtEnd()) goto success;
         break;
       }
 
@@ -407,79 +446,87 @@ failure:
 void Nested::SerializeWithCachedSizes(
     ::google::protobuf::io::CodedOutputStream* output) const {
   // @@protoc_insertion_point(serialize_start:tests.Nested)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  cached_has_bits = _has_bits_[0];
   // required string str = 1;
-  if (has_str()) {
+  if (cached_has_bits & 0x00000001u) {
     ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
       this->str().data(), this->str().length(),
       ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "str");
+      "tests.Nested.str");
     ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
       1, this->str(), output);
   }
 
   // optional string optional_str = 2;
-  if (has_optional_str()) {
+  if (cached_has_bits & 0x00000002u) {
     ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
       this->optional_str().data(), this->optional_str().length(),
       ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "optional_str");
+      "tests.Nested.optional_str");
     ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
       2, this->optional_str(), output);
   }
 
   // repeated string repeated_str = 3;
-  for (int i = 0; i < this->repeated_str_size(); i++) {
-  ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-    this->repeated_str(i).data(), this->repeated_str(i).length(),
-    ::google::protobuf::internal::WireFormat::SERIALIZE,
-    "repeated_str");
+  for (int i = 0, n = this->repeated_str_size(); i < n; i++) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
+      this->repeated_str(i).data(), this->repeated_str(i).length(),
+      ::google::protobuf::internal::WireFormat::SERIALIZE,
+      "tests.Nested.repeated_str");
     ::google::protobuf::internal::WireFormatLite::WriteString(
       3, this->repeated_str(i), output);
   }
 
-  if (!unknown_fields().empty()) {
+  if (_internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
         unknown_fields(), output);
   }
   // @@protoc_insertion_point(serialize_end:tests.Nested)
 }
 
-::google::protobuf::uint8* Nested::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
+::google::protobuf::uint8* Nested::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
   // @@protoc_insertion_point(serialize_to_array_start:tests.Nested)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  cached_has_bits = _has_bits_[0];
   // required string str = 1;
-  if (has_str()) {
+  if (cached_has_bits & 0x00000001u) {
     ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
       this->str().data(), this->str().length(),
       ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "str");
+      "tests.Nested.str");
     target =
       ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
         1, this->str(), target);
   }
 
   // optional string optional_str = 2;
-  if (has_optional_str()) {
+  if (cached_has_bits & 0x00000002u) {
     ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
       this->optional_str().data(), this->optional_str().length(),
       ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "optional_str");
+      "tests.Nested.optional_str");
     target =
       ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
         2, this->optional_str(), target);
   }
 
   // repeated string repeated_str = 3;
-  for (int i = 0; i < this->repeated_str_size(); i++) {
+  for (int i = 0, n = this->repeated_str_size(); i < n; i++) {
     ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
       this->repeated_str(i).data(), this->repeated_str(i).length(),
       ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "repeated_str");
+      "tests.Nested.repeated_str");
     target = ::google::protobuf::internal::WireFormatLite::
       WriteStringToArray(3, this->repeated_str(i), target);
   }
 
-  if (!unknown_fields().empty()) {
+  if (_internal_metadata_.have_unknown_fields()) {
     target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
         unknown_fields(), target);
   }
@@ -487,76 +534,88 @@ void Nested::SerializeWithCachedSizes(
   return target;
 }
 
-int Nested::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // required string str = 1;
-    if (has_str()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::StringSize(
-          this->str());
-    }
-
-    // optional string optional_str = 2;
-    if (has_optional_str()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::StringSize(
-          this->optional_str());
-    }
+size_t Nested::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:tests.Nested)
+  size_t total_size = 0;
 
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  // required string str = 1;
+  if (has_str()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->str());
   }
   // repeated string repeated_str = 3;
-  total_size += 1 * this->repeated_str_size();
-  for (int i = 0; i < this->repeated_str_size(); i++) {
+  total_size += 1 *
+      ::google::protobuf::internal::FromIntSize(this->repeated_str_size());
+  for (int i = 0, n = this->repeated_str_size(); i < n; i++) {
     total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
       this->repeated_str(i));
   }
 
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
+  // optional string optional_str = 2;
+  if (has_optional_str()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->optional_str());
   }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
   GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
+  _cached_size_ = cached_size;
   GOOGLE_SAFE_CONCURRENT_WRITES_END();
   return total_size;
 }
 
 void Nested::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
+// @@protoc_insertion_point(generalized_merge_from_start:tests.Nested)
+  GOOGLE_DCHECK_NE(&from, this);
   const Nested* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Nested*>(
-      &from);
+      ::google::protobuf::internal::DynamicCastToGenerated<const Nested>(
+          &from);
   if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:tests.Nested)
     ::google::protobuf::internal::ReflectionOps::Merge(from, this);
   } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:tests.Nested)
     MergeFrom(*source);
   }
 }
 
 void Nested::MergeFrom(const Nested& from) {
-  GOOGLE_CHECK_NE(&from, this);
+// @@protoc_insertion_point(class_specific_merge_from_start:tests.Nested)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
   repeated_str_.MergeFrom(from.repeated_str_);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_str()) {
-      set_str(from.str());
+  cached_has_bits = from._has_bits_[0];
+  if (cached_has_bits & 3u) {
+    if (cached_has_bits & 0x00000001u) {
+      set_has_str();
+      str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.str_);
     }
-    if (from.has_optional_str()) {
-      set_optional_str(from.optional_str());
+    if (cached_has_bits & 0x00000002u) {
+      set_has_optional_str();
+      optional_str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.optional_str_);
     }
   }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
 }
 
 void Nested::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:tests.Nested)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
 void Nested::CopyFrom(const Nested& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:tests.Nested)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
@@ -564,58 +623,259 @@ void Nested::CopyFrom(const Nested& from) {
 
 bool Nested::IsInitialized() const {
   if ((_has_bits_[0] & 0x00000001) != 0x00000001) return false;
-
   return true;
 }
 
 void Nested::Swap(Nested* other) {
-  if (other != this) {
-    std::swap(str_, other->str_);
-    std::swap(optional_str_, other->optional_str_);
-    repeated_str_.Swap(&other->repeated_str_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
+  if (other == this) return;
+  InternalSwap(other);
+}
+void Nested::InternalSwap(Nested* other) {
+  repeated_str_.InternalSwap(&other->repeated_str_);
+  str_.Swap(&other->str_);
+  optional_str_.Swap(&other->optional_str_);
+  std::swap(_has_bits_[0], other->_has_bits_[0]);
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  std::swap(_cached_size_, other->_cached_size_);
 }
 
 ::google::protobuf::Metadata Nested::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Nested_descriptor_;
-  metadata.reflection = Nested_reflection_;
-  return metadata;
+  protobuf_protobuf_5ftests_2eproto::protobuf_AssignDescriptorsOnce();
+  return protobuf_protobuf_5ftests_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+#if PROTOBUF_INLINE_NOT_IN_HEADERS
+// Nested
+
+// required string str = 1;
+bool Nested::has_str() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+void Nested::set_has_str() {
+  _has_bits_[0] |= 0x00000001u;
+}
+void Nested::clear_has_str() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+void Nested::clear_str() {
+  str_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  clear_has_str();
+}
+const ::std::string& Nested::str() const {
+  // @@protoc_insertion_point(field_get:tests.Nested.str)
+  return str_.GetNoArena();
+}
+void Nested::set_str(const ::std::string& value) {
+  set_has_str();
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tests.Nested.str)
+}
+#if LANG_CXX11
+void Nested::set_str(::std::string&& value) {
+  set_has_str();
+  str_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tests.Nested.str)
+}
+#endif
+void Nested::set_str(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  set_has_str();
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tests.Nested.str)
+}
+void Nested::set_str(const char* value, size_t size) {
+  set_has_str();
+  str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tests.Nested.str)
+}
+::std::string* Nested::mutable_str() {
+  set_has_str();
+  // @@protoc_insertion_point(field_mutable:tests.Nested.str)
+  return str_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+::std::string* Nested::release_str() {
+  // @@protoc_insertion_point(field_release:tests.Nested.str)
+  clear_has_str();
+  return str_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+void Nested::set_allocated_str(::std::string* str) {
+  if (str != NULL) {
+    set_has_str();
+  } else {
+    clear_has_str();
+  }
+  str_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), str);
+  // @@protoc_insertion_point(field_set_allocated:tests.Nested.str)
+}
+
+// optional string optional_str = 2;
+bool Nested::has_optional_str() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+void Nested::set_has_optional_str() {
+  _has_bits_[0] |= 0x00000002u;
+}
+void Nested::clear_has_optional_str() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+void Nested::clear_optional_str() {
+  optional_str_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  clear_has_optional_str();
+}
+const ::std::string& Nested::optional_str() const {
+  // @@protoc_insertion_point(field_get:tests.Nested.optional_str)
+  return optional_str_.GetNoArena();
+}
+void Nested::set_optional_str(const ::std::string& value) {
+  set_has_optional_str();
+  optional_str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tests.Nested.optional_str)
+}
+#if LANG_CXX11
+void Nested::set_optional_str(::std::string&& value) {
+  set_has_optional_str();
+  optional_str_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tests.Nested.optional_str)
+}
+#endif
+void Nested::set_optional_str(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  set_has_optional_str();
+  optional_str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tests.Nested.optional_str)
+}
+void Nested::set_optional_str(const char* value, size_t size) {
+  set_has_optional_str();
+  optional_str_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tests.Nested.optional_str)
+}
+::std::string* Nested::mutable_optional_str() {
+  set_has_optional_str();
+  // @@protoc_insertion_point(field_mutable:tests.Nested.optional_str)
+  return optional_str_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+::std::string* Nested::release_optional_str() {
+  // @@protoc_insertion_point(field_release:tests.Nested.optional_str)
+  clear_has_optional_str();
+  return optional_str_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+void Nested::set_allocated_optional_str(::std::string* optional_str) {
+  if (optional_str != NULL) {
+    set_has_optional_str();
+  } else {
+    clear_has_optional_str();
+  }
+  optional_str_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), optional_str);
+  // @@protoc_insertion_point(field_set_allocated:tests.Nested.optional_str)
+}
+
+// repeated string repeated_str = 3;
+int Nested::repeated_str_size() const {
+  return repeated_str_.size();
+}
+void Nested::clear_repeated_str() {
+  repeated_str_.Clear();
+}
+const ::std::string& Nested::repeated_str(int index) const {
+  // @@protoc_insertion_point(field_get:tests.Nested.repeated_str)
+  return repeated_str_.Get(index);
+}
+::std::string* Nested::mutable_repeated_str(int index) {
+  // @@protoc_insertion_point(field_mutable:tests.Nested.repeated_str)
+  return repeated_str_.Mutable(index);
+}
+void Nested::set_repeated_str(int index, const ::std::string& value) {
+  // @@protoc_insertion_point(field_set:tests.Nested.repeated_str)
+  repeated_str_.Mutable(index)->assign(value);
+}
+#if LANG_CXX11
+void Nested::set_repeated_str(int index, ::std::string&& value) {
+  // @@protoc_insertion_point(field_set:tests.Nested.repeated_str)
+  repeated_str_.Mutable(index)->assign(std::move(value));
+}
+#endif
+void Nested::set_repeated_str(int index, const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  repeated_str_.Mutable(index)->assign(value);
+  // @@protoc_insertion_point(field_set_char:tests.Nested.repeated_str)
+}
+void Nested::set_repeated_str(int index, const char* value, size_t size) {
+  repeated_str_.Mutable(index)->assign(
+    reinterpret_cast<const char*>(value), size);
+  // @@protoc_insertion_point(field_set_pointer:tests.Nested.repeated_str)
+}
+::std::string* Nested::add_repeated_str() {
+  // @@protoc_insertion_point(field_add_mutable:tests.Nested.repeated_str)
+  return repeated_str_.Add();
+}
+void Nested::add_repeated_str(const ::std::string& value) {
+  repeated_str_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add:tests.Nested.repeated_str)
+}
+#if LANG_CXX11
+void Nested::add_repeated_str(::std::string&& value) {
+  repeated_str_.Add(std::move(value));
+  // @@protoc_insertion_point(field_add:tests.Nested.repeated_str)
+}
+#endif
+void Nested::add_repeated_str(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  repeated_str_.Add()->assign(value);
+  // @@protoc_insertion_point(field_add_char:tests.Nested.repeated_str)
+}
+void Nested::add_repeated_str(const char* value, size_t size) {
+  repeated_str_.Add()->assign(reinterpret_cast<const char*>(value), size);
+  // @@protoc_insertion_point(field_add_pointer:tests.Nested.repeated_str)
+}
+const ::google::protobuf::RepeatedPtrField< ::std::string>&
+Nested::repeated_str() const {
+  // @@protoc_insertion_point(field_list:tests.Nested.repeated_str)
+  return repeated_str_;
+}
+::google::protobuf::RepeatedPtrField< ::std::string>*
+Nested::mutable_repeated_str() {
+  // @@protoc_insertion_point(field_mutable_list:tests.Nested.repeated_str)
+  return &repeated_str_;
 }
 
+#endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
 
 // ===================================================================
 
-#ifndef _MSC_VER
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
 const int SimpleMessage::kIdFieldNumber;
 const int SimpleMessage::kNumbersFieldNumber;
-#endif  // !_MSC_VER
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 SimpleMessage::SimpleMessage()
-  : ::google::protobuf::Message() {
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
+    protobuf_protobuf_5ftests_2eproto::InitDefaults();
+  }
   SharedCtor();
   // @@protoc_insertion_point(constructor:tests.SimpleMessage)
 }
-
-void SimpleMessage::InitAsDefaultInstance() {
-}
-
 SimpleMessage::SimpleMessage(const SimpleMessage& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL),
+      _has_bits_(from._has_bits_),
+      _cached_size_(0),
+      numbers_(from.numbers_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.has_id()) {
+    id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.id_);
+  }
   // @@protoc_insertion_point(copy_constructor:tests.SimpleMessage)
 }
 
 void SimpleMessage::SharedCtor() {
-  ::google::protobuf::internal::GetEmptyString();
   _cached_size_ = 0;
-  id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
+  id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 
 SimpleMessage::~SimpleMessage() {
@@ -624,11 +884,7 @@ SimpleMessage::~SimpleMessage() {
 }
 
 void SimpleMessage::SharedDtor() {
-  if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete id_;
-  }
-  if (this != default_instance_) {
-  }
+  id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 
 void SimpleMessage::SetCachedSize(int size) const {
@@ -637,74 +893,75 @@ void SimpleMessage::SetCachedSize(int size) const {
   GOOGLE_SAFE_CONCURRENT_WRITES_END();
 }
 const ::google::protobuf::Descriptor* SimpleMessage::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return SimpleMessage_descriptor_;
+  protobuf_protobuf_5ftests_2eproto::protobuf_AssignDescriptorsOnce();
+  return protobuf_protobuf_5ftests_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
 }
 
 const SimpleMessage& SimpleMessage::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_protobuf_5ftests_2eproto();
-  return *default_instance_;
+  protobuf_protobuf_5ftests_2eproto::InitDefaults();
+  return *internal_default_instance();
 }
 
-SimpleMessage* SimpleMessage::default_instance_ = NULL;
-
-SimpleMessage* SimpleMessage::New() const {
-  return new SimpleMessage;
+SimpleMessage* SimpleMessage::New(::google::protobuf::Arena* arena) const {
+  SimpleMessage* n = new SimpleMessage;
+  if (arena != NULL) {
+    arena->Own(n);
+  }
+  return n;
 }
 
 void SimpleMessage::Clear() {
+// @@protoc_insertion_point(message_clear_start:tests.SimpleMessage)
+  numbers_.Clear();
   if (has_id()) {
-    if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-      id_->clear();
-    }
+    GOOGLE_DCHECK(!id_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()));
+    (*id_.UnsafeRawStringPointer())->clear();
   }
-  numbers_.Clear();
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
+  _has_bits_.Clear();
+  _internal_metadata_.Clear();
 }
 
 bool SimpleMessage::MergePartialFromCodedStream(
     ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
   ::google::protobuf::uint32 tag;
   // @@protoc_insertion_point(parse_start:tests.SimpleMessage)
   for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
+    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
     tag = p.first;
     if (!p.second) goto handle_unusual;
     switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
       // required string id = 1;
       case 1: {
-        if (tag == 10) {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                 input, this->mutable_id()));
           ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
             this->id().data(), this->id().length(),
             ::google::protobuf::internal::WireFormat::PARSE,
-            "id");
+            "tests.SimpleMessage.id");
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(16)) goto parse_numbers;
         break;
       }
 
       // repeated int32 numbers = 2;
       case 2: {
-        if (tag == 16) {
-         parse_numbers:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(16u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                    ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
-                 1, 16, input, this->mutable_numbers())));
-        } else if (tag == 18) {
+                 1, 16u, input, this->mutable_numbers())));
+        } else if (static_cast< ::google::protobuf::uint8>(tag) ==
+                   static_cast< ::google::protobuf::uint8>(18u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                    ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                  input, this->mutable_numbers())));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(16)) goto parse_numbers;
-        if (input->ExpectAtEnd()) goto success;
         break;
       }
 
@@ -733,50 +990,56 @@ failure:
 void SimpleMessage::SerializeWithCachedSizes(
     ::google::protobuf::io::CodedOutputStream* output) const {
   // @@protoc_insertion_point(serialize_start:tests.SimpleMessage)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  cached_has_bits = _has_bits_[0];
   // required string id = 1;
-  if (has_id()) {
+  if (cached_has_bits & 0x00000001u) {
     ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
       this->id().data(), this->id().length(),
       ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "id");
+      "tests.SimpleMessage.id");
     ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
       1, this->id(), output);
   }
 
   // repeated int32 numbers = 2;
-  for (int i = 0; i < this->numbers_size(); i++) {
+  for (int i = 0, n = this->numbers_size(); i < n; i++) {
     ::google::protobuf::internal::WireFormatLite::WriteInt32(
       2, this->numbers(i), output);
   }
 
-  if (!unknown_fields().empty()) {
+  if (_internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
         unknown_fields(), output);
   }
   // @@protoc_insertion_point(serialize_end:tests.SimpleMessage)
 }
 
-::google::protobuf::uint8* SimpleMessage::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
+::google::protobuf::uint8* SimpleMessage::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
   // @@protoc_insertion_point(serialize_to_array_start:tests.SimpleMessage)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  cached_has_bits = _has_bits_[0];
   // required string id = 1;
-  if (has_id()) {
+  if (cached_has_bits & 0x00000001u) {
     ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
       this->id().data(), this->id().length(),
       ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "id");
+      "tests.SimpleMessage.id");
     target =
       ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
         1, this->id(), target);
   }
 
   // repeated int32 numbers = 2;
-  for (int i = 0; i < this->numbers_size(); i++) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteInt32ToArray(2, this->numbers(i), target);
-  }
+  target = ::google::protobuf::internal::WireFormatLite::
+    WriteInt32ToArray(2, this->numbers_, target);
 
-  if (!unknown_fields().empty()) {
+  if (_internal_metadata_.have_unknown_fields()) {
     target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
         unknown_fields(), target);
   }
@@ -784,69 +1047,75 @@ void SimpleMessage::SerializeWithCachedSizes(
   return target;
 }
 
-int SimpleMessage::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // required string id = 1;
-    if (has_id()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::StringSize(
-          this->id());
-    }
+size_t SimpleMessage::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:tests.SimpleMessage)
+  size_t total_size = 0;
 
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        unknown_fields());
+  }
+  // required string id = 1;
+  if (has_id()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->id());
   }
   // repeated int32 numbers = 2;
   {
-    int data_size = 0;
-    for (int i = 0; i < this->numbers_size(); i++) {
-      data_size += ::google::protobuf::internal::WireFormatLite::
-        Int32Size(this->numbers(i));
-    }
-    total_size += 1 * this->numbers_size() + data_size;
+    size_t data_size = ::google::protobuf::internal::WireFormatLite::
+      Int32Size(this->numbers_);
+    total_size += 1 *
+                  ::google::protobuf::internal::FromIntSize(this->numbers_size());
+    total_size += data_size;
   }
 
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
   GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
+  _cached_size_ = cached_size;
   GOOGLE_SAFE_CONCURRENT_WRITES_END();
   return total_size;
 }
 
 void SimpleMessage::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
+// @@protoc_insertion_point(generalized_merge_from_start:tests.SimpleMessage)
+  GOOGLE_DCHECK_NE(&from, this);
   const SimpleMessage* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const SimpleMessage*>(
-      &from);
+      ::google::protobuf::internal::DynamicCastToGenerated<const SimpleMessage>(
+          &from);
   if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:tests.SimpleMessage)
     ::google::protobuf::internal::ReflectionOps::Merge(from, this);
   } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:tests.SimpleMessage)
     MergeFrom(*source);
   }
 }
 
 void SimpleMessage::MergeFrom(const SimpleMessage& from) {
-  GOOGLE_CHECK_NE(&from, this);
+// @@protoc_insertion_point(class_specific_merge_from_start:tests.SimpleMessage)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
   numbers_.MergeFrom(from.numbers_);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_id()) {
-      set_id(from.id());
-    }
+  if (from.has_id()) {
+    set_has_id();
+    id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.id_);
   }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
 }
 
 void SimpleMessage::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:tests.SimpleMessage)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
 }
 
 void SimpleMessage::CopyFrom(const SimpleMessage& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:tests.SimpleMessage)
   if (&from == this) return;
   Clear();
   MergeFrom(from);
@@ -854,32 +1123,127 @@ void SimpleMessage::CopyFrom(const SimpleMessage& from) {
 
 bool SimpleMessage::IsInitialized() const {
   if ((_has_bits_[0] & 0x00000001) != 0x00000001) return false;
-
   return true;
 }
 
 void SimpleMessage::Swap(SimpleMessage* other) {
-  if (other != this) {
-    std::swap(id_, other->id_);
-    numbers_.Swap(&other->numbers_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
+  if (other == this) return;
+  InternalSwap(other);
+}
+void SimpleMessage::InternalSwap(SimpleMessage* other) {
+  numbers_.InternalSwap(&other->numbers_);
+  id_.Swap(&other->id_);
+  std::swap(_has_bits_[0], other->_has_bits_[0]);
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  std::swap(_cached_size_, other->_cached_size_);
 }
 
 ::google::protobuf::Metadata SimpleMessage::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = SimpleMessage_descriptor_;
-  metadata.reflection = SimpleMessage_reflection_;
-  return metadata;
+  protobuf_protobuf_5ftests_2eproto::protobuf_AssignDescriptorsOnce();
+  return protobuf_protobuf_5ftests_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+#if PROTOBUF_INLINE_NOT_IN_HEADERS
+// SimpleMessage
+
+// required string id = 1;
+bool SimpleMessage::has_id() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+void SimpleMessage::set_has_id() {
+  _has_bits_[0] |= 0x00000001u;
+}
+void SimpleMessage::clear_has_id() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+void SimpleMessage::clear_id() {
+  id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  clear_has_id();
+}
+const ::std::string& SimpleMessage::id() const {
+  // @@protoc_insertion_point(field_get:tests.SimpleMessage.id)
+  return id_.GetNoArena();
+}
+void SimpleMessage::set_id(const ::std::string& value) {
+  set_has_id();
+  id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tests.SimpleMessage.id)
+}
+#if LANG_CXX11
+void SimpleMessage::set_id(::std::string&& value) {
+  set_has_id();
+  id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tests.SimpleMessage.id)
+}
+#endif
+void SimpleMessage::set_id(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  set_has_id();
+  id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tests.SimpleMessage.id)
+}
+void SimpleMessage::set_id(const char* value, size_t size) {
+  set_has_id();
+  id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tests.SimpleMessage.id)
+}
+::std::string* SimpleMessage::mutable_id() {
+  set_has_id();
+  // @@protoc_insertion_point(field_mutable:tests.SimpleMessage.id)
+  return id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+::std::string* SimpleMessage::release_id() {
+  // @@protoc_insertion_point(field_release:tests.SimpleMessage.id)
+  clear_has_id();
+  return id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+void SimpleMessage::set_allocated_id(::std::string* id) {
+  if (id != NULL) {
+    set_has_id();
+  } else {
+    clear_has_id();
+  }
+  id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), id);
+  // @@protoc_insertion_point(field_set_allocated:tests.SimpleMessage.id)
+}
+
+// repeated int32 numbers = 2;
+int SimpleMessage::numbers_size() const {
+  return numbers_.size();
+}
+void SimpleMessage::clear_numbers() {
+  numbers_.Clear();
+}
+::google::protobuf::int32 SimpleMessage::numbers(int index) const {
+  // @@protoc_insertion_point(field_get:tests.SimpleMessage.numbers)
+  return numbers_.Get(index);
+}
+void SimpleMessage::set_numbers(int index, ::google::protobuf::int32 value) {
+  numbers_.Set(index, value);
+  // @@protoc_insertion_point(field_set:tests.SimpleMessage.numbers)
+}
+void SimpleMessage::add_numbers(::google::protobuf::int32 value) {
+  numbers_.Add(value);
+  // @@protoc_insertion_point(field_add:tests.SimpleMessage.numbers)
+}
+const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >&
+SimpleMessage::numbers() const {
+  // @@protoc_insertion_point(field_list:tests.SimpleMessage.numbers)
+  return numbers_;
+}
+::google::protobuf::RepeatedField< ::google::protobuf::int32 >*
+SimpleMessage::mutable_numbers() {
+  // @@protoc_insertion_point(field_mutable_list:tests.SimpleMessage.numbers)
+  return &numbers_;
 }
 
+#endif  // PROTOBUF_INLINE_NOT_IN_HEADERS
 
 // ===================================================================
 
-#ifndef _MSC_VER
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
 const int Message::kBFieldNumber;
 const int Message::kStrFieldNumber;
 const int Message::kBytesFieldNumber;
@@ -909,44 +1273,63 @@ const int Message::kRepeatedNestedFieldNumber;
 const int Message::kEmptyFieldNumber;
 const int Message::kOptionalDefaultFieldNumber;
 const int Message::kOptionalNoDefaultFieldNumber;
-#endif  // !_MSC_VER
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 Message::Message()
-  : ::google::protobuf::Message() {
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
+    protobuf_protobuf_5ftests_2eproto::InitDefaults();
+  }
   SharedCtor();
   // @@protoc_insertion_point(constructor:tests.Message)
 }
-
-void Message::InitAsDefaultInstance() {
-  nested_ = const_cast< ::tests::Nested*>(&::tests::Nested::default_instance());
-}
-
 Message::Message(const Message& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL),
+      _has_bits_(from._has_bits_),
+      _cached_size_(0),
+      repeated_string_(from.repeated_string_),
+      repeated_bytes_(from.repeated_bytes_),
+      repeated_int32_(from.repeated_int32_),
+      repeated_int64_(from.repeated_int64_),
+      repeated_uint32_(from.repeated_uint32_),
+      repeated_uint64_(from.repeated_uint64_),
+      repeated_sint32_(from.repeated_sint32_),
+      repeated_sint64_(from.repeated_sint64_),
+      repeated_float_(from.repeated_float_),
+      repeated_double_(from.repeated_double_),
+      repeated_enum_(from.repeated_enum_),
+      repeated_nested_(from.repeated_nested_),
+      empty_(from.empty_),
+      repeated_bool_(from.repeated_bool_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.has_str()) {
+    str_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.str_);
+  }
+  bytes_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.has_bytes()) {
+    bytes_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.bytes_);
+  }
+  if (from.has_nested()) {
+    nested_ = new ::tests::Nested(*from.nested_);
+  } else {
+    nested_ = NULL;
+  }
+  ::memcpy(&int64_, &from.int64_,
+    reinterpret_cast<char*>(&optional_default_) -
+    reinterpret_cast<char*>(&int64_) + sizeof(optional_default_));
   // @@protoc_insertion_point(copy_constructor:tests.Message)
 }
 
 void Message::SharedCtor() {
-  ::google::protobuf::internal::GetEmptyString();
   _cached_size_ = 0;
-  b_ = false;
-  str_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  bytes_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  int32_ = 0;
-  int64_ = GOOGLE_LONGLONG(0);
-  uint32_ = 0u;
-  uint64_ = GOOGLE_ULONGLONG(0);
-  sint32_ = 0;
-  sint64_ = GOOGLE_LONGLONG(0);
-  f_ = 0;
-  d_ = 0;
+  str_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  bytes_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  ::memset(&nested_, 0, reinterpret_cast<char*>(&b_) -
+    reinterpret_cast<char*>(&nested_) + sizeof(b_));
   e_ = 1;
-  nested_ = NULL;
   optional_default_ = 42;
-  optional_no_default_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
 }
 
 Message::~Message() {
@@ -955,13 +1338,9 @@ Message::~Message() {
 }
 
 void Message::SharedDtor() {
-  if (str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete str_;
-  }
-  if (bytes_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete bytes_;
-  }
-  if (this != default_instance_) {
+  str_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  bytes_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (this != internal_default_instance()) {
     delete nested_;
   }
 }
@@ -972,62 +1351,25 @@ void Message::SetCachedSize(int size) const {
   GOOGLE_SAFE_CONCURRENT_WRITES_END();
 }
 const ::google::protobuf::Descriptor* Message::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Message_descriptor_;
+  protobuf_protobuf_5ftests_2eproto::protobuf_AssignDescriptorsOnce();
+  return protobuf_protobuf_5ftests_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
 }
 
 const Message& Message::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_protobuf_5ftests_2eproto();
-  return *default_instance_;
+  protobuf_protobuf_5ftests_2eproto::InitDefaults();
+  return *internal_default_instance();
 }
 
-Message* Message::default_instance_ = NULL;
-
-Message* Message::New() const {
-  return new Message;
+Message* Message::New(::google::protobuf::Arena* arena) const {
+  Message* n = new Message;
+  if (arena != NULL) {
+    arena->Own(n);
+  }
+  return n;
 }
 
 void Message::Clear() {
-#define OFFSET_OF_FIELD_(f) (reinterpret_cast<char*>(      \
-  &reinterpret_cast<Message*>(16)->f) - \
-   reinterpret_cast<char*>(16))
-
-#define ZR_(first, last) do {                              \
-    size_t f = OFFSET_OF_FIELD_(first);                    \
-    size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last);  \
-    ::memset(&first, 0, n);                                \
-  } while (0)
-
-  if (_has_bits_[0 / 32] & 255) {
-    ZR_(b_, int32_);
-    ZR_(int64_, sint32_);
-    if (has_str()) {
-      if (str_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-        str_->clear();
-      }
-    }
-    if (has_bytes()) {
-      if (bytes_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-        bytes_->clear();
-      }
-    }
-  }
-  if (_has_bits_[8 / 32] & 7936) {
-    ZR_(sint64_, f_);
-    e_ = 1;
-    if (has_nested()) {
-      if (nested_ != NULL) nested_->::tests::Nested::Clear();
-    }
-  }
-  if (_has_bits_[24 / 32] & 402653184) {
-    optional_default_ = 42;
-    optional_no_default_ = 0;
-  }
-
-#undef OFFSET_OF_FIELD_
-#undef ZR_
-
-  repeated_bool_.Clear();
+// @@protoc_insertion_point(message_clear_start:tests.Message)
   repeated_string_.Clear();
   repeated_bytes_.Clear();
   repeated_int32_.Clear();
@@ -1041,173 +1383,189 @@ void Message::Clear() {
   repeated_enum_.Clear();
   repeated_nested_.Clear();
   empty_.Clear();
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
+  repeated_bool_.Clear();
+  if (_has_bits_[0 / 32] & 7u) {
+    if (has_str()) {
+      GOOGLE_DCHECK(!str_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()));
+      (*str_.UnsafeRawStringPointer())->clear();
+    }
+    if (has_bytes()) {
+      GOOGLE_DCHECK(!bytes_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()));
+      (*bytes_.UnsafeRawStringPointer())->clear();
+    }
+    if (has_nested()) {
+      GOOGLE_DCHECK(nested_ != NULL);
+      nested_->::tests::Nested::Clear();
+    }
+  }
+  if (_has_bits_[0 / 32] & 248u) {
+    ::memset(&int64_, 0, reinterpret_cast<char*>(&sint64_) -
+      reinterpret_cast<char*>(&int64_) + sizeof(sint64_));
+  }
+  if (_has_bits_[8 / 32] & 32512u) {
+    ::memset(&sint32_, 0, reinterpret_cast<char*>(&b_) -
+      reinterpret_cast<char*>(&sint32_) + sizeof(b_));
+    e_ = 1;
+    optional_default_ = 42;
+  }
+  _has_bits_.Clear();
+  _internal_metadata_.Clear();
 }
 
 bool Message::MergePartialFromCodedStream(
     ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
   ::google::protobuf::uint32 tag;
   // @@protoc_insertion_point(parse_start:tests.Message)
   for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(16383);
+    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
     tag = p.first;
     if (!p.second) goto handle_unusual;
     switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
       // required string str = 1;
       case 1: {
-        if (tag == 10) {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                 input, this->mutable_str()));
           ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
             this->str().data(), this->str().length(),
             ::google::protobuf::internal::WireFormat::PARSE,
-            "str");
+            "tests.Message.str");
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(18)) goto parse_bytes;
         break;
       }
 
       // required bytes bytes = 2;
       case 2: {
-        if (tag == 18) {
-         parse_bytes:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(18u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                 input, this->mutable_bytes()));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(24)) goto parse_int32;
         break;
       }
 
       // optional int32 int32 = 3;
       case 3: {
-        if (tag == 24) {
-         parse_int32:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(24u)) {
+          set_has_int32();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                  input, &int32_)));
-          set_has_int32();
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(32)) goto parse_int64;
         break;
       }
 
       // optional int64 int64 = 4;
       case 4: {
-        if (tag == 32) {
-         parse_int64:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(32u)) {
+          set_has_int64();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                  input, &int64_)));
-          set_has_int64();
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(40)) goto parse_uint32;
         break;
       }
 
       // optional uint32 uint32 = 5;
       case 5: {
-        if (tag == 40) {
-         parse_uint32:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(40u)) {
+          set_has_uint32();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                  input, &uint32_)));
-          set_has_uint32();
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(48)) goto parse_uint64;
         break;
       }
 
       // optional uint64 uint64 = 6;
       case 6: {
-        if (tag == 48) {
-         parse_uint64:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(48u)) {
+          set_has_uint64();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                  input, &uint64_)));
-          set_has_uint64();
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(56)) goto parse_sint32;
         break;
       }
 
       // optional sint32 sint32 = 7;
       case 7: {
-        if (tag == 56) {
-         parse_sint32:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(56u)) {
+          set_has_sint32();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                  input, &sint32_)));
-          set_has_sint32();
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(64)) goto parse_sint64;
         break;
       }
 
       // optional sint64 sint64 = 8;
       case 8: {
-        if (tag == 64) {
-         parse_sint64:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(64u)) {
+          set_has_sint64();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                  input, &sint64_)));
-          set_has_sint64();
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(77)) goto parse_f;
         break;
       }
 
       // required float f = 9;
       case 9: {
-        if (tag == 77) {
-         parse_f:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(77u)) {
+          set_has_f();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                  input, &f_)));
-          set_has_f();
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(81)) goto parse_d;
         break;
       }
 
       // required double d = 10;
       case 10: {
-        if (tag == 81) {
-         parse_d:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(81u)) {
+          set_has_d();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                  input, &d_)));
-          set_has_d();
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(88)) goto parse_e;
         break;
       }
 
       // required .tests.Enum e = 11;
       case 11: {
-        if (tag == 88) {
-         parse_e:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(88u)) {
           int value;
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
@@ -1220,212 +1578,198 @@ bool Message::MergePartialFromCodedStream(
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(98)) goto parse_nested;
         break;
       }
 
       // required .tests.Nested nested = 12;
       case 12: {
-        if (tag == 98) {
-         parse_nested:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(98u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                input, mutable_nested()));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(106)) goto parse_repeated_string;
         break;
       }
 
       // repeated string repeated_string = 13;
       case 13: {
-        if (tag == 106) {
-         parse_repeated_string:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(106u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                 input, this->add_repeated_string()));
           ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
             this->repeated_string(this->repeated_string_size() - 1).data(),
             this->repeated_string(this->repeated_string_size() - 1).length(),
             ::google::protobuf::internal::WireFormat::PARSE,
-            "repeated_string");
+            "tests.Message.repeated_string");
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(106)) goto parse_repeated_string;
-        if (input->ExpectTag(114)) goto parse_repeated_bytes;
         break;
       }
 
       // repeated bytes repeated_bytes = 14;
       case 14: {
-        if (tag == 114) {
-         parse_repeated_bytes:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(114u)) {
           DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                 input, this->add_repeated_bytes()));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(114)) goto parse_repeated_bytes;
-        if (input->ExpectTag(120)) goto parse_repeated_int32;
         break;
       }
 
       // repeated int32 repeated_int32 = 15;
       case 15: {
-        if (tag == 120) {
-         parse_repeated_int32:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(120u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                    ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
-                 1, 120, input, this->mutable_repeated_int32())));
-        } else if (tag == 122) {
+                 1, 120u, input, this->mutable_repeated_int32())));
+        } else if (static_cast< ::google::protobuf::uint8>(tag) ==
+                   static_cast< ::google::protobuf::uint8>(122u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                    ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                  input, this->mutable_repeated_int32())));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(120)) goto parse_repeated_int32;
-        if (input->ExpectTag(128)) goto parse_repeated_int64;
         break;
       }
 
       // repeated int64 repeated_int64 = 16;
       case 16: {
-        if (tag == 128) {
-         parse_repeated_int64:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(128u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                    ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
-                 2, 128, input, this->mutable_repeated_int64())));
-        } else if (tag == 130) {
+                 2, 128u, input, this->mutable_repeated_int64())));
+        } else if (static_cast< ::google::protobuf::uint8>(tag) ==
+                   static_cast< ::google::protobuf::uint8>(130u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                    ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                  input, this->mutable_repeated_int64())));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(128)) goto parse_repeated_int64;
-        if (input->ExpectTag(136)) goto parse_repeated_uint32;
         break;
       }
 
       // repeated uint32 repeated_uint32 = 17;
       case 17: {
-        if (tag == 136) {
-         parse_repeated_uint32:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(136u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                    ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
-                 2, 136, input, this->mutable_repeated_uint32())));
-        } else if (tag == 138) {
+                 2, 136u, input, this->mutable_repeated_uint32())));
+        } else if (static_cast< ::google::protobuf::uint8>(tag) ==
+                   static_cast< ::google::protobuf::uint8>(138u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                    ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                  input, this->mutable_repeated_uint32())));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(136)) goto parse_repeated_uint32;
-        if (input->ExpectTag(144)) goto parse_repeated_uint64;
         break;
       }
 
       // repeated uint64 repeated_uint64 = 18;
       case 18: {
-        if (tag == 144) {
-         parse_repeated_uint64:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(144u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                    ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
-                 2, 144, input, this->mutable_repeated_uint64())));
-        } else if (tag == 146) {
+                 2, 144u, input, this->mutable_repeated_uint64())));
+        } else if (static_cast< ::google::protobuf::uint8>(tag) ==
+                   static_cast< ::google::protobuf::uint8>(146u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                    ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                  input, this->mutable_repeated_uint64())));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(144)) goto parse_repeated_uint64;
-        if (input->ExpectTag(152)) goto parse_repeated_sint32;
         break;
       }
 
       // repeated sint32 repeated_sint32 = 19;
       case 19: {
-        if (tag == 152) {
-         parse_repeated_sint32:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(152u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                    ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
-                 2, 152, input, this->mutable_repeated_sint32())));
-        } else if (tag == 154) {
+                 2, 152u, input, this->mutable_repeated_sint32())));
+        } else if (static_cast< ::google::protobuf::uint8>(tag) ==
+                   static_cast< ::google::protobuf::uint8>(154u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                    ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                  input, this->mutable_repeated_sint32())));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(152)) goto parse_repeated_sint32;
-        if (input->ExpectTag(160)) goto parse_repeated_sint64;
         break;
       }
 
       // repeated sint64 repeated_sint64 = 20;
       case 20: {
-        if (tag == 160) {
-         parse_repeated_sint64:
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(160u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                    ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
-                 2, 160, input, this->mutable_repeated_sint64())));
-        } else if (tag == 162) {
+                 2, 160u, input, this->mutable_repeated_sint64())));
+        } else if (static_cast< ::google::protobuf::uint8>(tag) ==
+                   static_cast< ::google::protobuf::uint8>(162u)) {
           DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                    ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                  input, this->mutable_repeated_sint64())));
         } else {
           goto handle_unusual;
         }
-        if (input->ExpectTag(160)) goto parse_repeated_sint64;
-        if (input->ExpectTag(173)) goto parse_repeated_float;
  

<TRUNCATED>